19:字符串移位包含问题
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
输入
- 一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。 输出
- 如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。 样例输入
-
AABCD CDAA
样例输出
-
true
代码实现#include<cstdio> #include<cstring> using namespace std; char s1[100],s2[100]; int l1,l2,ok; int main() { scanf("%s %s",s1,s2); l1=strlen(s1); l2=strlen(s2); if(l1>l2) { memcpy(s1+l1,s1,l1); /*函数原型 void *memcpy(void*dest, const void *src, size_t n); 功能 由src指向地址为起始地址的连续n个字节的数据复制到以destin 指向地址为起始地址的空间内。*/ if(strstr(s1,s2)!=NULL) /**strstr(str1,str2) str1: 被查找目标 string expression to search. str2: 要查找对象 The string expression to find. 返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址; 如果str2不是str1的子串,则返回NULL。*/ { printf("true"); ok=1; } } else { memcpy(s2+l2,s2,l2); if(strstr(s2,s1)!=NULL) { printf("true"); ok=1; } } if(!ok) printf("false"); return 0; }