【c++】判断目标字符串是不是另一个给定字符串左旋后的字符串

思路讲解:

首先:根据上一篇博客左旋一个字符串的实现方法,我们只需要将给定字符串所有的左旋情况列举出来。

然后:利用strcmp()函数将每个左旋后的字符串与目标字符串对比,如果相同就返回,所有的都不相同就跳出循环输出不相同。

#include<stdio.h>
#include<stdlib.h>
#include<string>
//用指针左旋字符串
int main()
{
	char str[] = "0";
	scanf("%s", str);
	char zuoxuan[] = "0";
	char shuru[] = "0";
	scanf("%s", shuru);
	char *p = str;
	char *q = zuoxuan;
	int a = 2;//要左旋第几个
	int b = strlen(str);//7
	int i = 0;
	int c = 0;
	for (a = 0; a <= b; ++a)
	{
		
		if (0 == a)
		{
			c = 0;
		}
		else
		{
			for (i = a - 1; i <= b; ++i)
			{
				*(q + c) = *(p + i);
				++c;
			}
			for (i = 0; i < a - 1; ++i)
			{
				*(q + c - 1) = *(p + i);
				++c;
			}
			*(q + c - 1) = '\0';
			c = 0;
			//puts(zuoxuan);
			
		}
		int jieshou = strcmp(shuru, zuoxuan);
		//printf("%d\n", jieshou);
		if (0 == jieshou)
		{
			printf("是这个字符串的左旋\n");
			break;

		}
		else if (b == a)
		{
			jieshou = strcmp(shuru, zuoxuan);
			if (0 == jieshou)
			{
				printf("是左旋后的字符串\n");
			}
			else
			{
				printf("不是左旋后的字符串\n");
			}
		}		
	}
	
	system("pause");
	return 0;
}

亮点展示:

else if (b == a)
		{
			jieshou = strcmp(shuru, zuoxuan);
			if (0 == jieshou)
			{
				printf("是左旋后的字符串\n");
			}
			else
			{
				printf("不是左旋后的字符串\n");
			}
		}	

在这里将最后一次循环截进if判断里单独判断。

因为要是有最后一个字母之前任意一个字母左旋后的结果相同就已经跳出循环。

最后一次单独判断,是否相同,如果不相同就输出不是它的左旋后的字符串即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值