C# · 12月 19, 2021

使用C语言实现字符串左旋和右旋问题

1.实现一个函数,可以左旋字符串中的k个字符。

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

1.暴力移位法

#include

#include

#include

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

#include

#include

#include

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”,arr);

system(“pause”);

return 0;

}

2.实现一个函数,可以右旋字符串中的k个字符。

ABCD右旋一个字符得到DABC

ABCD右旋两个字符得到CDAB

1.暴力移位法

#include

#include

#include

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,arr);

system(“pause”);

return 0;

}

2.三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者

先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以

具体代码如下:

#include

#include

#include

#include

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,str + len-k -1);//逆序前半部分

reverse(str+len-k,str + len – 1);//逆序后半部分

reverse( str,str + len – 1);//逆序整个字符串

reverse(str,str + len – 1);//逆序后半部分

}

int main()

{

char arr[] = “ABCDEFG”;

int n = 0;

printf(“请输入右旋位数:”);

scanf_s(“%d”,arr);

system(“pause”);

return 0;

}

总结

以上所述是小编给大家介绍的使用C语言实现字符串左旋和右旋问题。 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得不错,可分享给好友!感谢支持。