判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
思路:测出从键盘接收的字符串的长度,每次对第一个字符串左移一位,每左移一位与第二个字符串进行比较,若相等则记下并跳出循环;若不相等则继续左移并进行比较,直到左移位数与字符串长度相等
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int Isleft() {
char s1[100] = { '\0' }, s2[100] = { '\0' };
printf("请输入字符串s1:\n");
scanf("%s", s1);
printf("请输入字符串s2:\n");
scanf("%s", s2);
int length = strlen(s1);
int n = length;
int a = 0; //标志变量,等于1相等,0不想等
while (n > 0) { //至多左移length位
char c = s1[0];
for (int i = 0; i < length - 1; i++) {
s1[i] = s1[i + 1];
}
s1[length - 1] = c;
if (strcmp(s1, s2) == 0) { //判断左移一位之后的字符串是否与第二个字符串相等
a = 1; //若相等则a=1,并跳出
break;
}
n--;
}
return a;
}
int main() {
int check = Isleft();
if (check == 0) {
printf("s2不是s1旋转之后的字符\n");
}
else {
printf("s2是s1旋转之后的字符\n");
}
system("pause");
return 0;
}
测试结果