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