//方法一
int is_left_move(char* s1,char* s2)
{
int len = strlen(s1);
int i = 0;
for(i=0;i<len;i++)
{
left_move(s1,1);//这里不能以下旋转好几个的原因是 旋转之后就变了
//在进行下次旋转就不是原来的字符串旋转得到的了
int ret = strcmp(s1,s2);//相同返回0 不同返回1
if(ret == 0)
{
return 1;
}
//这里不能直接else 要等所有的都判断完了之后
}
return 0;
}
//方法二
//abcdefabcdef 所有反转得来的都是这个字符串的子集
int is_left_move_2(char* str1,char* str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
if(len1 != len2)
{
return 0;
}
//1.在str1字符串中追加一个str1字符串
//strcat 这个库函数 不可以自己对自己追加 会把\0改掉
//strncat
strncat(str1,str1,len1);
//2.判断str2指向的字符串是否是str指向的字符串的子串
//strstr-找子串
char* ret = strstr(str1,str2);//在str1中找str2 找不到返回空指针
if(ret == NULL)
{
return 0;
}
else
{
return 1;
}
return 0;
}
//主函数
int main()
{
char arr1[] = "abcdef";//char arr1 = "abcdef" 这样会出现错误 原因是这样定义的话
char arr2[] = "cdefa";//是定义的常量字符串 不允许修改 所以还是定义为数组形式
//int ret = is_left_move(arr1,arr2);
int ret = is_left_move_2(arr1,arr2);
if(ret == 1)
{
printf("YES\n");
}
if(ret == 0)
{
printf("NO\n");
}
return 0;
}
判断一个字符串是否由另外一个字符串旋转而来
最新推荐文章于 2024-02-03 01:27:37 发布