判斷一個字符串是否爲另一個旋轉之後的字符串

    判斷一個字符串是否爲另一個旋轉之後的字符串?

    例如: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;
}

發佈了32 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章