运用字符串中位置的调换,比较一个旋转与另一个字符串是否相同。上篇博客的拓展。

对上一篇博客的拓展题。

2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.


AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC 

对于这道题,咱们和上一篇代码原理大同小异。

来看代码具体实现

#include<stdio.h>
#include<string.h>
void reverse(char *str,char *end)//传入字符串对应的地址。
{
	while(str<=end)
	{
		char temp = *str;
		*str = *end;
		*end = temp;
		str++;
		end--;
	}
}
void left_move(char arr[],int length,int input)
{
	char *str = arr;
	char *end = str + length - 1;
	reverse(str,end);//将整个字符串逆置。
	reverse(str,str+length-input-1);//左转
	reverse(str+length-input,end);//左转
	//reverse(str,str+input-1);//右转
	//reverse(str+input,end);//右转
	//printf("%s",arr);

}
int compare(char s1[],char s2[])
{
	char *p = s1;
	char *q = s2;
	
	while(*p!='\0')
	{
		if(*p == *q)
		{
			p++;
			q++;
		}
		else
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	int result = 0;
	int x = 0;
	char s1[] = "AABCD";
	char s2[] = "BCDAA";
	int length = strlen(s2);
	printf("s1  %s\ns2  %s\n",s1,s2);
	for(x=1; x<=length; x++)
	{
		left_move(s2,length,x);
		result = compare(s1,s2);
		if(result == 1)
		{
			printf("S2左旋转%d个字符后与s1相比相同\n",x);
			break;
		}
		else
		{

			printf("s2左旋转%d个字符后与s1相比不同\ns1  %s\ns2  %s\n",x,s1,s2);
		}
	}
	if(x>length)
	{
		printf("两个字符串不相同\n");
	}
	return 0;
}


来看看结果



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值