1. 程式人生 > >判斷一個字串是否為另外一個字串旋轉之後的字串。 例如:給定s1 =AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.

判斷一個字串是否為另外一個字串旋轉之後的字串。 例如:給定s1 =AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.

思路:
判斷字串是否是給定字串旋轉後的,可以用左旋或者右旋後的每次與給定字串比較,如果有相等的就可以得出判定字串是給定字串旋轉後的,字串左旋或者右旋的次數都等於字串的長度,利用字串函式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; }