今天写了一个字符串中前n个字符的位置旋转,也可以说是位置调换,怎么理解呢?
举一个例子:
一个字符串ABCDE将它的前2个字符旋转到字符的后面,那么就变成了CDEAB。
再如将ABCDE前1个字符旋转,就变成了BCDEA。
那么想一想要将字符串中的字符位置调换,而且只能开辟少量的空间,所以我们就可以用指针。
那么来看看我们是具体怎么实现的:
#include<stdio.h>
#include<string.h>
void reverse(char *str,char *end)//传入字符串首地址和尾地址进行字符内容调换。
{
while(str<=end)
{
char temp = *str;
*str = *end;
*end = temp;
str++;
end--;
}
}
void move(char arr[],int length,int input)//旋转
{
char *str = arr;
char *end = str + length - 1;
reverse(str,end);//将整个字符串逆置。
reverse(str,str+length-input-1);//左转
reverse(str+length-input,end);//左转
//reverse(str,str+input-1);//右转
//reverse(str+input,end);//右转
printf("%s",arr);
}
int main()
{
int input = 0;
char arr[] = "ABCDEFGHIJK";
int length = strlen(arr);
printf("%s\n",arr);
printf("请输入要左转字符的个数\n");
scanf("%d",&input);
if(input>=1&&input<length)
{
move(arr,length,input);
}
else
{
printf("输入错误\n");
}
return 0;
}
通过用指针一个str一个end分别指向字符串的头和尾,进行位置调换。
这样就可以的出结果: