使用C语言实现字符串左旋和右旋问题
2018-07-30 09:58
681 查看
1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
1.暴力移位法
#include <stdio.h> #include <stdlib.h> #include <string.h> void left_move(char*str, int k) { int len = 0; int i = 0; while (k--) { //1.把第一个保存起来 char tmp = *str; //2.后面的向后移动 len = strlen(str); for (i = 0; i < len; i++) { *(str + i) = *(str + 1 + i); } //3.把保存的数据放在最后一位 *(str + len - 1) = tmp; } } int main() { char arr[] = "ABCD"; int n = 0; printf("请输入左旋位数:"); scanf_s("%d", &n); left_move(arr, n); printf("%s ", arr); system("pause"); return 0; }
2.三步翻转法
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> void reverse(char *left, char* right) { assert(left&&right);//断言 while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void left_move(char*str, int k) { int len = strlen(str); reverse(str, str + k - 1);//逆序前半部分 reverse(str+k, str + len - 1);//逆序后半部分 reverse(str, str+ len - 1);//逆序整个字符串 } int main() { char arr[] = "ABCD"; int n = 0; printf("请输入左旋位数:"); scanf_s("%d", &n); left_move(arr, n); printf("%s ", arr); system("pause"); return 0; }
2.实现一个函数,可以右旋字符串中的k个字符。
ABCD右旋一个字符得到DABC
ABCD右旋两个字符得到CDAB
1.暴力移位法
#include <stdio.h> #include <stdlib.h> #include <string.h> void right_move(char* p, int k) { int len = strlen(p); for (int i = 0; i < k; ++i)//控制旋转次数 { char tmp = p[len - 1]; for (int j = len - 1; j > 0; --j)//完成一次旋转 { p[j] = p[j - 1]; } p[0] = tmp; } } int main() { char arr[] = "ABCD"; int n = 0; printf("请输入右旋位数:"); scanf_s("%d", &n); right_move(arr, n); printf("%s ", arr); system("pause"); return 0; }
2.三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者
先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以
具体代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> void reverse(char *left, char* right) { assert(left&&right);//断言 while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void right_move(char*str, int k) { int len = strlen(str); reverse(str, str + len-k -1);//逆序前半部分 reverse(str+len-k, str + len - 1);//逆序后半部分 reverse( str ,str + len - 1);//逆序整个字符串 reverse(str, str + len - 1);//逆序整个字符串 reverse(str, str + k - 1);//逆序前半部分 reverse(str+k, str + len - 1);//逆序后半部分 } int main() { char arr[] = "ABCDEFG"; int n = 0; printf("请输入右旋位数:"); scanf_s("%d", &n); right_move(arr, n); printf("%s ", arr); system("pause"); return 0; }
总结
以上所述是小编给大家介绍的使用C语言实现字符串左旋和右旋问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
相关文章推荐
- C语言:编写一个函数实现一串字符串的左旋或者右旋
- 海思中fifo的使用及c语言中fifo的使用以及c中关于字符串的说明%s以及strlen注意问题
- c语言使用指针实现模拟java/c# string.concat字符串串联方法
- 【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- 【c语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
- 使用C语言实现字符串中子字符串的替换
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- 用c语言实现字符串的拷贝函数(不使用库函数)
- 实现字符串左旋和右旋的常见方法
- 【C语言】实现一个函数,可以左旋字符串中的k个字符。
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- 问题九:编写函数stringcat,实现字符串的连接,程序中需要使用指针形式访问字符串
- C语言 编写程序实现字符串比较,不允许使用strcmp函数。
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- 使用C语言实现字符串中子字符串的替换
- 使用C语言解决字符串全排列问题
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。