【问题描述】
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一个字符串通过若干次循环移位后的新字符串的子串。
【输入】
一行,包含两个字符串,中间由若干空格隔开。字符串只包含字母和数字,长度不超过30。
【输出】
如果一个字符串是另一个字符串通过若干次循环移位产生的新的串的子串,则输出true,否则输出false。
【输出样例】
AABCD CDAA
【输出样例】
true
【参考程序】
#include<stdio.h>
#include<string.h>
const int n=61;
char s1[n],s2[n],x[n],t[n];
int l1,l2;
int main(){
scanf("%s%s",&s1,&s2);
if(strlen(s1) < strlen(s2)){
strcpy(t,s1);
strcpy(s1,s2);
strcpy(s2,t);
}
strcpy(x,s1);
if(strstr(strcat(s1,x)/*亮点*/,s2) == NULL)
printf("false\n");
else printf("true\n");
return 0;
}
/*
strstr(s1,s2)函数用于判断s2字符串是否是s1字符串的子串,
是则返回str2在str1中首次出现的地址,否则返回NULL。
strcat(s1,s2)用于将str2连接到str1后并返回str1的值
*/
这么多天打开新思路的题
这个字符串函数包比想象中的有用