对上一篇博客的拓展题。
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
对于这道题,咱们和上一篇代码原理大同小异。
来看代码具体实现
#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 left_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 compare(char s1[],char s2[])
{
char *p = s1;
char *q = s2;
while(*p!='\0')
{
if(*p == *q)
{
p++;
q++;
}
else
{
return 0;
}
}
return 1;
}
int main()
{
int result = 0;
int x = 0;
char s1[] = "AABCD";
char s2[] = "BCDAA";
int length = strlen(s2);
printf("s1 %s\ns2 %s\n",s1,s2);
for(x=1; x<=length; x++)
{
left_move(s2,length,x);
result = compare(s1,s2);
if(result == 1)
{
printf("S2左旋转%d个字符后与s1相比相同\n",x);
break;
}
else
{
printf("s2左旋转%d个字符后与s1相比不同\ns1 %s\ns2 %s\n",x,s1,s2);
}
}
if(x>length)
{
printf("两个字符串不相同\n");
}
return 0;
}
来看看结果