判斷一個字串是否為另外一個字串旋轉之後的字串。 例如:給定s1 =AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.
阿新 • • 發佈:2018-12-24
思路:
判斷字串是否是給定字串旋轉後的,可以用左旋或者右旋後的每次與給定字串比較,如果有相等的就可以得出判定字串是給定字串旋轉後的,字串左旋或者右旋的次數都等於字串的長度,利用字串函式strcmpk可以比較2個字串。
#define use _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
int is_rotate (char *str1 ,char *str2) //判斷字串是否相等函式
{
if(strcmp ( str1,str2)==0)
return 1;
else
return 0;
}
//int right_rotate (char*str1, char *str2,int sz) //右旋函式
//{
// int i=0;
// int p=sz;
// int ret=0;
// while (p--) //以字串長度進行右旋轉
// {
// char temp=str2[sz-1]; //把最後一個字串每次先儲存下來
// for (i=sz-1;i>0;i--)
// {
// str2[i]=str2[i-1]; //使字串依次後移
// }
// str2[i]=temp; //把儲存的內容賦給前邊空了的下標中
// ret=is_rotate (str1,str2); //呼叫字串,每次旋轉後進行比較
// if (ret) //如果相等就返回1,否則返回0
// break;
// }
// return ret;
//}
int left_rotate (char* str1,char *str2,int sz) //左旋函式
{ int p=sz;
int i=0;
int ret=0;
while (p--)
{
char temp= str2[0]; //把首字串每次先儲存下來
for (i=0;i<sz-1;i++)
{
str2[i]=str2[i+1]; //使字串依次前移
}
str2[i]=temp; //把儲存的內容賦給後邊空了的下標中
ret= is_rotate (str1,str2); //呼叫字串,每次旋轉後進行比較
if (ret)
break;
}
return ret;
}
int main ()
{ int ret1=0;
//int ret2=0;
char string1[]="ABCDE";
char string2[]="ABCED";
ret1=left_rotate (string1,string2,(sizeof string2/sizeof string2[0]-1));
//printf ("%d\n",ret1);
//ret2=right_rotate (string1,string2,(sizeof string1/sizeof string1[0]-1));
//printf ("%d\n",ret2);
if (ret1)
printf("字串str2是經過字串str1旋轉的\n");
else
printf("字串str2不是經過字串str1旋轉的\n");
/*if (ret2)
printf("字串str2是經過字串str1旋轉的\n");
else
printf("字串str2不是經過字串str1旋轉的\n");*/
system ("pause");
return 0;
}