题目:
思路:先判断两个字符长度是否相等,如果不相等,肯定不是互为旋转字符串。
方法一:将第一份字符串右旋0-n(字符个数)次,判断是否有一次右旋完的字符串等于第二个字符串。如果有,返回1,如果没有,返回0.
方法一之前写过,参考:https://mp.csdn.net/mp_blog/creation/editor/134369876
方法二:将第一份字符串复制一份黏贴在第一份字符串后面,如:ABCD,ABCDABCD,因为这样ABCDABCD中,包含了ABCD所有的有右旋任意次的情况(可以自己试一下哈)。然后判断黏贴完后的字符串是否包含第二份字符串。
代码展示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int findRound(const char* src, const char* find)
{
char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
strcpy(tmp, src); //先拷贝一遍
strcat(tmp, src); //再连接一遍
return strstr(tmp, find) != NULL; //看看找不找得到
}
int main()
{
int a = 0;
const char* str = "abcd";
const char* find = "cdab";
if (strlen(str) == strlen(find))
{
a = findRound(str, find);
}
else
{
a = 0;
}
printf("%d", a);
}