如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

写这篇文章的原因

今天在刷题的过程中遇到了一个题就是:判断一个字符串是否是由另一个字符串旋转得来的呢?我呢,一开始的思路是:将一个字符串的所有旋转结果都给写出来,然后再一个一个来判断。这样听起来是不是就特别麻烦,告诉你这不只是麻烦而且还容易出错,就拿我写的代码说吧。

void ReverseStr(char* str1,int m, int n)
{
	char* left = str1 + m;
	char* right = str1 + n;
	while (left <= right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

int IsReverseStr(char* str1, char* str2, void (*p)(char* str1, int m, int n))
{
	int len = strlen(str1);
	char start[6] = "0";
	strncpy(start, str1,5);
	for (int i = 0; i < len; i++)
	{
		ReverseStr(str1, 0,i);
		ReverseStr(str1, i+1,len-1);
		ReverseStr(str1, 0,len-1);
		if (0 == strcmp(str1, str2))
			return 1;
	}
	return 0;
}

int main()
{
	char arr1[] = "AABCD";
	char arr2[] = "BCDAA";
	int ret = IsReverseStr(arr1, arr2,ReverseStr);
	printf("%d", ret);

	return 0;

}

有没有看出问题

如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

 对了,就是当我进行了一次字符串旋转的时候,原来的字符串里面内容的顺序也就被打乱了,我们再进行下一次操作的时候就不能得到我们想要的结果了,就是因为这个困扰了我大半天,我不断地调试修改最终以我当前的知识储备,还是没能将功能给实现,所以我就请教了老师,我一看代码我都懵了,为啥就这几行代码就能将我的几十行代码给替换,代码少不说,功能也实现了,而且逻辑也不复杂,比起我自己写的代码可好太多了。所以这里呢我想给大家分享分享我的经历,希望能告诉大家要提增强自己的逻辑能力,多刷题,多看看别人的代码是怎样写的。

代码实现

下面就是那几行打败我的代码

int findRound(const char * src, char * find)
{
	char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
	strcpy(tmp, src); //先拷贝一遍
	strcat(tmp, src); //再连接一遍
	return strstr(tmp, find) != NULL; //看看找不找得到
}

看着是不是很不可思议,是不是觉得我之前写的代码太冗余了?大家可千万别学我这样,既浪费了时间,还没有达到目的。祝大家在以后的计算机生涯中越走越顺,谢谢大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/192674.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!