左移字符串有多种方法,这里只介绍两种方法。
方法一、
一个字符一个字符的左移,先将第一个字符保存起来,然后将后面的每一个字符都向前移一个字符,‘\0’不移,要想移n个字符,就这样循环n次就好了。
方法二、
先将左移的前n个字符翻转,然后将剩余的一串字符翻转,最后将所有的字符再翻转一次,用三次翻转就可以将n个字符左移。这种方法比前一种方法效率要好一些。
方法一的代码如下:
#include<stdio.h>
#include<assert.h>
#include<string.h>
void rotate_left(char *str, int n)
{
assert(str);
int i = 0;
char left =0;
int len = strlen(str);
while (n > 0)
{ i = 0;
left = *str;
while (i<len-1)
{
str[i] = str[i + 1];
i++;
}
str[i] = left;
n--;
}
}
int main()
{
int n = 0;
char str[] = { 0 };
printf("请输入字符串:");
gets(str);
printf("请输入左旋次数:");
scanf("%d", &n);
rotate_left(str, n);
printf("左旋后的字符串为:");
puts(str);
system("pause");
return 0;
}
方法二的代码如下:
#include<stdio.h>
void reverse(char *left,char *right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char *str, int n)
{
int len = strlen(str);
reverse(str, str + n - 1);
reverse(str + n, str + len - 1);
reverse(str, str + len - 1);
}
int main()
{
char str[] = "abcdef";
int n = 0;
scanf("%d", &n);
left_move(str, n);
printf("%s", str);
system("pause");
return 0;
}
转载于:https://blog.51cto.com/haipi/1715007