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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值