您的位置:首页 > 编程语言 > C语言/C++

判断一个字符串是否为另一个旋转之后的字符串

2016-12-08 21:14 381 查看
    判断一个字符串是否为另一个旋转之后的字符串?

    例如: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言
相关文章推荐