百练_3711:字符串移位包含问题
描述
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
输入 一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。 输出 如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。 样例输入AABCD CDAA
样例输出
true
#include<stdio.h> #include<string.h> int main() { int i,k=0,j=0,d=0,t2,stra,strb; char t,a[40],b[40]; scanf("%s%s",&a,&b); stra=strlen(a); strb=strlen(b); if(stra>strb) { if(strstr(a,b)!=NULL) {printf("true "); return 0;} for(i=0;i<stra;i++) { k=0; t=a[0]; for(j=0;j<stra-1;j++) a[j]=a[j+1]; a[stra-1]=t; if(strstr(a,b)!=NULL) {printf("true "); return 0;} } }else if(strb>stra){ if(strstr(b,a)!=NULL) {printf("true "); return 0;} for(i=0;i<strb;i++) { k=0; t=b[0]; for(j=0;j<strb-1;j++) b[j]=b[j+1]; a[strb-1]=t; if(strstr(b,a)!=NULL) {printf("true "); return 0;} } }else{ if(strstr(a,b)!=NULL) {printf("true "); return 0;} for(i=0;i<stra;i++) { for(j=0;j<strb;j++) { t=b[0]; for(k=0;k<strb-1;k++) b[k]=b[k+1]; b[strb-1]=t; if(strstr(a,b)!=NULL) {printf("true "); return 0;} } t2=a[0]; for(d=0;d<stra-1;d++) a[d]=a[d+1]; a[stra-1]=t2; if(strstr(a,b)!=NULL) {printf("true "); return 0;} } } printf("false "); getchar(); return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 字符串循环移位
- 下一篇: linux应用编程随笔