要求如下:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
//左旋字符串
#include<stdio.h>
#include<stdlib.h>
#include<string>
int main()
{
char str[] = "asdfgh";
char zuoxuan[18] = "0";
int a=strlen(str);
int b = 3;//指定要左旋第几个字符
int c = 0;
for (int i = b - 1; i <= a; ++i)
{
zuoxuan[c] = str[i];
++c;
}
for (int i = 0; i < b-1; ++i)
{
zuoxuan[c-1] = str[i];
++c;
}
zuoxuan[c-1] = '\0';//这个地方一定要注意字符串的结束标志。否则会访问越界
//puts(zuoxuan);
for (int i = 0; i <= strlen(zuoxuan); ++i)
{
printf("%c", zuoxuan[i]);
}
system("pause");
return 0;
}
思路讲解:
用数组的方式左旋字符串,需要用到另一个空的字符串。
首先,将要左旋的字符串从要左旋的字母开始依次存到另一个字符串中。
然后,从被左旋的字符串首元素到左旋的元素的前一个元素依次存到接收字符串当中。
应当重点注意的是:
第二次存入字符的时候,会将字符串的结束标志‘\0’覆盖掉,如果在结束后没有将‘\0’重新赋进去。否则在输出的时候就会发生访问越界。出现乱码。