题目:
字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:
- 给定s1 =AABCD 和 s2 = BCDAA,返回1
- 给定s1=abcd 和 s2=ACBD,返回0
何为旋转:
- AABCD左旋1个字符得到ABCDA
- AABCD左旋2个字符得到BCDAA
- AABCD右旋1个字符得到DAABC
题目分析:
我们可以先将一个字符串进行自我追加,如:
ABCDE --> ABCDEABCDE
经过追加后,新字符串中就涵盖了左旋与右旋的所有组合
此时再利用strstr函数来判断,另一字符串是否属于这所有组合之一
属于 -----> 是左、右旋的结果 ---> 返回1
不属于 --> 不是左、右旋的结果 --> 返回0
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
int Is_left_reverse(char* str1, char* str2)
{
assert(str1 && str2);
int len_1 = strlen(str1);
int len_2 = strlen(str2);
if (len_1 != len_2)
{
return 0;
}
//将字符串追加在自己后面
//这样追加后的新字符串中,就涵盖了所有的左旋与右旋的组合
strncat(str1, str1, len_1);
//查找字符传是否属于所有组合之一
//属于 ---- 是左、右旋的结果
//不属于 -- 不是左、右旋的结果
if (strstr(str1, str2) != NULL)
{
return 1;
}
return 0;
}
int main()
{
char str_1[20] = "abcde";
char str_2[20] = "eabcd";
int ret = 0;
ret = Is_left_reverse(str_1, str_2);
if (1 == ret)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}