示例:
将字符串mystring左旋一个字符,即 ystringm
将字符串mystring左旋两个字符,即 stringmy
以此类推......
方法一:暴力求解法
实现思想:
1、将字符串第一个字符内容赋给一个临时变量
2、将剩下的字符串一次向左挪动一个位置
3、将第一个字符放到已经空缺出来的最后一个位置
实现代码:
#include <stdio.h>
void left_movestring(char* arr, int x)//x是想左旋字符的个数
{
int len = strlen(arr);//计算字符串长度
for(int i = 0; i < x; i++)
{
//1.将第一个字符的值赋给一个中间变量
char tmp = *arr;
//2.将首字符后面的字符串的位置都向左移动一位
for(int j = 0; j < len - 1; j++)
{
*(arr + j) = *(arr + j+1);
}
//3.将第一个字符放到空缺出来的最后一个位置
*(arr + len -1) = tmp;
}
}
int main()
{
char str[] = "mystring";
left_movestring(str, 3);//将数组str中的字符串左旋3个
printf("%s\n",str);
return 0;
}
运行结果:
方法二:三步翻转法
实现思想:
1、将想要左旋的x个字符逆序
2、将剩下的字符串逆序
3、将整个字符串逆序
例:要左旋mystring3个字符
1、将左边mys三个字符逆序,得到:symtring
2、将剩下的字符串tring逆序,得到:symgnirt
3、将整个字符串symgnirt逆序,得到tringmys
实现代码:
#include <stdio.h>
#include <string.h>
void reverse(char* left, char* right)//字符串逆序函数
{
while(left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_movestring(char *arr, int x)
{
int len = strlen(arr);
reverse(arr,arr + x -1);//逆序左边x个字符
reverse(arr + x, arr + len -1);//逆序右边剩下的字符
reverse(arr, arr + len -1);//整体逆序
}
int main()
{
char arr[] = "mystring";
left_movestring(arr,3);
printf("%s\n",arr);
return 0;
return 0;
}
运行结果: