| 思路分析: 方法1. 通过每次左旋一个字符来判断左旋之后的字符串与其是否相等,循环N次,是则返回1,否则返回0; 方法2. 将被比较字符串AABCD往后再添加一 |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<assert.h>
//str1 为字符穿原内容 str2为字符穿左旋判断内容
char str1[] = "HELLO WORLD";
char str2[] = "LLO WORLDHE";
// 方法1每一次左旋再进行判断
is_leftmove(char str1[],const char str2[])
{
assert(str1),assert(str2);
int n = strlen(str1);
{ //此区域判断两个字符穿长度是否相同
int m = strlen(str2);
if (n != m)
{
return 0;
}
}
for (int i = 1; i <= n; i++)
{
int tmp = str1[0];
for (int i=0;i<n-1;i++)
{
str1[i] = str1[i + 1];
}
str1[n - 1] = tmp;
if (!strcmp(str1, str2))
{
return 1;
}
}
return 0;
}
//方法二,使用strncat(arr1,arr2,n)来使原字符串自身倍增 “ABCD -> ABCDABCD”, 再通过函数strstr(arr1,arr2)来判断arr2是否为arr1的子串
int is_leftmove(char str1[],const char str2[])
{
assert(str1); assert(str2);
int n = strlen(str1); int m = strlen(str2);
if (n != m)
{
return 0;
}
strncat(str1, str1, n);
int ret=strstr(str1, str2);
if (ret != NULL)
{
return 1;
}
return 0;
}
int main()
{
//判断字符穿str2 是否为 str1的左旋
//设置一个判断的函数 名字叫做 is_leftmove()
int ret=is_leftmove(str1,str2);
if (ret)
{printf("yes\n");}
else { printf("no\n"); }
return 0;
}
思路分析:
方法1. 通过每次左旋一个字符来判断左旋之后的字符串与其是否相等,循环N次,是则返回1,否则返回0;
方法2. 将被比较字符串AABCD往后再添加一
段相同字符串AABCD,通过stancat函数实现,"stancat(arr,arr,n)", arr值的是目标地址 字符串末尾地址,arr为添加内容, n为添加元
素个数。 添加之后通过strstr函数比较字符串 str2是否为str1的子串, strstr (str1,str2);如果str2为str1的子串,则会返回子串在母串当
中的第一次出现起始地址,不同返回空指针。 strstr函数返回类型为指针。