字符串旋转
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include<stdio.h> #include<string.h> #include<assert.h>
int strJudge(const char* str1, const char* str2) {
char* str2_start = (char*)str2;
assert(str1 != NULL && str2 != NULL);
assert(strlen(str1) != 1); if (!(strlen(str1) == strlen(str2))) return 0;
while (*str2) { if (*str2 == *str1) { ++str1; break; }
++str2; } if (*str2 == '\0') return 0;
while (*str1) { ++str2;
if (*str2 == '\0') str2 = str2_start; if (!(*str2 == *str1)) return 0;
++str1; }
return 1; }
int main(void) {
char str1[100]; char str2[100];
printf("Enter two strings: "); scanf("%s %s", str1, str2);
if (strJudge(str1, str2)) printf("Yes\n"); else printf("No\n");
return 0; }
|
效果
1 2 3 4 5 6
| lsx@DESKTOP-LFPDU8K:~$ ./test Enter two strings: AABCD BCDAA Yes lsx@DESKTOP-LFPDU8K:~$ ./test Enter two strings: asdas dsasd No
|