sha*_*nan 3 c string substring
编写代码来检查,如果s2是旋转s1仅使用一个调用isSubString(即waterbottle是一个旋转erbottlewat).
我为此编写程序,但我无法获得所需的输出.请指导我哪里出错了.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int isRotated(char *s1, char *s2);
int isSubstring(char *s1, char *s2);
int isRotated(char *s1, char *s2)
{
int r;
char s[100];
if(strlen(s1) == strlen(s2))
strcpy(s, s1);
r = isSubstring(s, s2);
strcat(s, s1);
return r;
}
int isSubstring(char *s1, char *s2){
if(strstr(s1, s2))
return 1;
else
return 0;
}
int main(void) {
char s1[100], s2[100];
printf("Enter the first String\n");
scanf("%s", s1);
printf("Enter the second String\n");
scanf("%s", s2);
if(isRotated(s1, s2)==1)
printf("%s and %s are rotated string\n", s1, s2);
else
printf("%s and %s are not rotated string\n", s1, s2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要检查是否s2是旋转s1,您可能需要集中两个s1s,并尝试s2在新字符串中查找.
这是需要检查的长度s1和s2.例如,s1是"ABCD",s2是"CDA".然后s是"AB CDA BCD".strstr(s, s2) == 1但显然,s2不是轮换s1.
另外,我想首先打电话strcmp(),因为我认为"ABCD"是"ABCD"本身的轮换.但是,这只是一个定义问题.
int isRotated(char *s1, char *s2)
{
char s[199];
if(strlen(s1) != strlen(s2))
return 0;
else if(strcmp(s1, s2) == 0)
return 1;
else
strcpy(s, s1);
strcat(s, s1);
return isSubString(s, s2);
}
Run Code Online (Sandbox Code Playgroud)
BTW:"substring"是一个单词,因此可能更好地isSubString()改为isSubstring()