★判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA AABCD右旋一个字符得到DAABC
AABCD左旋两个字符得到BCDAA AABCD右旋两个字符得到CDAAB
|
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
|
#include <stdio.h>#include <string.h>#include <assert.h>#include<stdlib.h>int spin(char *p, char *q)
{assert(p != NULL && q != NULL); //断言传入的指针为不为空,用以抛出异常
strncat(p, p, strlen(p)); //strncat函数用以连接两个字符串,若用strcat则可能会发生越界,数组长度不够容纳越界处后续的字符,strlen用以求出字符串的长度
if (strstr(p, q) == NULL) //strstr用以在原字符串中查找目标字符串,注意参数的位置顺序
{return 0;
}else{return 1;
}}int main()
{char p[20] = "AABCD"; //原字符串
char *q = "BCDAA"; //目标字符串
char r[20] = "abcd"; //原字符串
char *s = "ACBD"; //目标字符串
printf("字符串:%s\t%s\n",p,q);
int ret = spin(p, q);
printf("BACK_VALUE=%d\n",ret); //输出返回值
printf("字符串:%s\t%s\n",r,s);
int rew = spin(r, s);
printf("BACK_VALUE=%d\n",rew); //输出返回值
system("pause");
return 0;
} |
转自http://blog.51cto.com/10738469/1709162