判斷一個字符串是否爲另一個旋轉之後的字符串?
例如:str1=abcd; str2=cdab; str3=ABCD; 則:str1與str2 是 返回 1;str2與str3 不是 返回 0。
分析: 一個字符串無論左旋還是右旋,只是改變字符在串的排序,在此以左旋討論,在本題中以遞歸討論。
代碼如下:
#include <stdio.h>
#include <string.h>
char *turn_one(char *str) //每次調用將字符串最左邊的值放到最右邊
{
char *get=str;
char *get_get=get;
char tmp=*str;
str++;
while(*str!='\0')
*(get++)=*(str++);
*get=tmp;
return get_get;
}
char *turn_left(char *str,int num) //控制左旋的字符個數
{
int i=0;
for(i=0;i<num-1;i++)
turn_one(str);
return turn_one(str);
}
int jude_same(char *str1,char *str2,int len1) //判斷是否爲旋轉之後字符串
{
int i=0;
for(i=0;i<len1;i++){ //將其中一個字符串每次左旋一個字符,然後與另一個字符串比較
if(strcmp(turn_left(str1,i),str2)==0)
return 1;
}
return 0;
}
int main()
{
char str1[]="hello"; //str1與str2爲測試數組
int len1=strlen(str1);
char str2[]="llohe";
int len2=strlen(str2);
if(len1==len2) //當倆個字符串大小相等進入比較
{
if(jude_same(str1,str2,len1))
printf("是\n");
else printf("不是");
}
else printf("不是\n");
return 0;
}