C语言编程C++旋转字符操作串示例详解
目录
- 旋转字符串
- 字符串左旋
- 题前认知:
- 暴力移位:
- 三步翻转:
- 判断字符串旋转
- 题前认知
- 字符串追加判断
旋转字符串
字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
题前认知:
一个字符串如果就定死了。eg:char arr[]=“dfdf”什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个体,不适合集群,但也是比死板的定死字符串舒服)
所以字符串得是我们可输入的,才有可玩性,玩的不尽性就循环
暴力移位:
#include#includechar* turn_left(char* arr, int num){ int len = strlen(arr); int i = 0; //左旋数是多少就进行几次移位 for (i = 0; i < num; i++) {//每次移位就是单次左旋int j = 0; char tmp = arr[0]; //每次都把首元素存起来for (j = 0; j < len-1; j++){arr[j] = arr[j + 1]; }arr[len-1] = tmp; //把存起来的首元素放到最后一位 } return arr; }int main(){ char arr[100] = {0}; int num = 0; while (1) {printf("请输入想要旋转的字符串:>"); gets(arr); printf("请输入想要左旋数:>"); scanf("%d", &num); getchar(); //这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话//下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区printf("左旋字符串为:%s\n", turn_left(arr, num)); } return 0; }
输出结果
文章图片
三步翻转:
#include#include#includevoid reverse(char* head, char* tail) //字符串逆序{ assert(head && tail); //断言阻止空指针 char tmp = 0; char* ptmp = &tmp; while (head"); gets(arr); printf("请输入想要左旋数:>"); scanf("%d", &num); getchar(); //这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话//下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区printf("左旋字符串为:%s\n", turn_left(arr, num)); } return 0; }
文章图片
文章图片
还有3种方法但那三种就需要很强的数学功底了,具体的我也看不懂他怎么证明的数学公式,就不看了。哈哈哈
判断字符串旋转 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
题前认知
大家现在应该知道我干啥,没错我倡导交互,两个字符串都是我们写
字符串追加判断
(面试的时候能用库函数就用库函数)
什么叫字符串追加判断呢 例如asdfg这个字符串
文章图片
#include#include#includeint is_left_move(char* str1, char* str2){ assert(str1 && str2); int len1 = strlen(str1); int len2 = strlen(str2); //长度不同就肯定不是旋转字符串 if (len1 - len2)return 0; //在arr1字符串中追加一个自己 strncat(str1, str1, len1); //判断判断的那个字符串是不是追加字符串的子串 char* ret = strstr(str1, str2); if (ret == NULL)return 0; elsereturn 1; }int main(){ char arr1[50] = {0}; //有足够的空间 char arr2[50] = {0}; while (1) {printf("请输入字符串:>"); gets(arr1); printf("请输入需判断的旋转字符串:>"); gets(arr2); int ret = is_left_move(arr1, arr2); if (ret == 1){printf("是旋转字符串\n"); }else{printf("不是旋转字符串\n"); } } return 0; }
结果
文章图片
【C语言编程C++旋转字符操作串示例详解】 以上就是C语言编程C++旋转字符操作串示例详解的详细内容,更多关于C语言编程C++旋转字符串的资料请关注脚本之家其它相关文章!
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- c++基础概念笔记
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- C++Primer之|C++Primer之 函数探幽
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- QML基础信息
- 旋转image、imageView
- 关于C语言编程入门基础学习的一些,常识类的小知识,干货分享
- C++-类型转换