给定两个字符串s1,s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。
/*
给定两个字符串s1,s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。
*/
解法1:将s1循环移动,每移动一次就比较一次。
#include<stdio.h> #include<string.h> int main() { char s1[]="AABCDEF"; char s2[]="CDEFA"; int len=strlen(s1); int i,j; char temp; for(i=0;i<len;i++) { temp=s1[0]; for(j=0;j<len-1;j++) { s1[j]=s1[j+1]; } s1[len-1]=temp; if(strstr(s1,s2)==0) { printf("TRUE\n"); return 0; } } printf("FALSE\n"); return 0; }
解法2:将s1循环移动的所有可能结果集合起来,然后看s2是否是其中一项的包含。
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char s1[]="AABCDEF"; char s2[]="CDEFA"; int len=strlen(s1); char *p[7]; char temp; int i,j,k; for(i=0;i<len;i++) { temp=s1[0]; for(j=0;j<len-1;j++) { s1[j]=s1[j+1]; } s1[len-1]=temp; p[i]=(char *)malloc(len*1); p[i]=s1; } for(i=0;i<len;i++) { if(strstr(p[i],s2)==0) { printf("true\n"); for(k=0;k<len;k++) { free(p[k]); } return 0; } } for(k=0;k<len;k++) { free(p[k]); } return 0; } 函数名: strstr 功 能: 在字符串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); strstr原型:extern char *strstr(char *haystack, char *needle); 头文件:#include <string.h> 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
有梦想就不会觉得苦.
Do you know what is the glittering life?