介绍
怎么在C语言中实现字符串左旋和右旋?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强> 1。实现一个函数,可以左旋字符串中的k个字符。强>
ABCD左旋一个字符得到BCDA
, ABCD左旋两个字符得到CDAB
<强>,1。暴力移位法强>
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; string.h> void left_move (char * str, int k) { int 才能;len =, 0; int 才能;小姐:=,0; while 才能;(k,) {才能 ,,,//1。把第一个保存起来 ,,,char tmp =, * str; ,,,//2。后面的向后移动 ,,,len =, strlen (str); ,,,for (小姐:=,0;,小姐:& lt;, len;,我+ +) ,,,{ ,,,,,* (+ 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才能(加勒比海盗,n); ,,printf (“% s “, arr); 系统才能(“pause"); return 才能;0; }
<强> 2。三步翻转法强>
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; string.h> # include & lt; assert.h> void 反向(char *左,,char *,右) { 维护才能(left&,右);//断言 while 才能;(left & lt;,右) {才能 ,,,char tmp =, *左; ,,,* left =, *正确; ,,,* right =, tmp; ,,,左+ +; ,,,,, ,,} } void left_move (char * str, int k) { int 才能;len =, strlen (str); 反向才能(str, str +, k 作用;1);//逆序前半部分 反向才能(str + k, str +, len 作用;1);//逆序后半部分 反向才能(str, str +, len 作用;1);//逆序整个字符串 } int main () { char 才能arr [],=,“ABCD"; int 才能;n =, 0; ,,printf(“请输入左旋位数:“); scanf_s才能(“% d",,, n); left_move才能(加勒比海盗,n); ,,printf (“% s “, arr); 系统才能(“pause"); return 才能;0; }
<强> 2。实现一个函数,可以右旋字符串中的k个字符。强>
ABCD右旋一个字符得到DABC
, ABCD右旋两个字符得到CDAB
<强> 1。暴力移位法强>
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; string.h> void right_move (char *, p, int k) { ,int len =, strlen (p); ,for (int 小姐:=,0;,小姐:& lt;, 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才能(加勒比海盗,n); ,,printf (“% s “, arr); 系统才能(“pause"); return 才能;0; }
<强> 2。三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者强>
先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以
具体代码如下:
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; string.h> # include & lt; assert.h> void 反向(char *左,,char *,右) { 维护才能(left&,右);//断言 while 才能;(left & lt;,右) {才能 ,,,char tmp =, *左; ,,,* left =, *正确; ,,,* right =, tmp; ,,,左+ +; ,,,,, ,,} } void right_move (char * str, int k) { int 才能;len =, strlen (str); 反向才能(str, str +, len-k 1);//逆序前半部分 反向才能(str + len-k, str +, len 作用;1);//逆序后半部分 反向才能(str , str +, len 作用;1);//逆序整个字符串 反向才能(str, str +, len 作用;1);//逆序整个字符串 反向才能(str, str +, k 作用;1);//逆序前半部分 反向才能(str + k, str +, len 作用;1);//逆序后半部分 } int main () { null null null null null null null null null怎么在C语言中实现字符串左旋和右旋