【发布时间】:2016-05-23 06:18:32
【问题描述】:
编写代码以检查 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;
}
【问题讨论】:
-
什么是
STrings????? -
“期望的输出”到底是什么意思?你得到了什么?错误信息?
-
如果两个字符串有不同的 lengtjs,
s未初始化,这意味着isSubString和strcat可能对未正确终止的字符串进行操作。 -
您显然希望通过将一个字符串连接到自身来找到旋转,然后在加倍字符串中找到另一个。现在将该策略与您编写的内容进行比较:您首先比较并连接。
-
你还应该注意你的字符串长度。您的输入字符串最多有 99 个字符,尽管您没有强制执行该限制。 (是的,我知道,100 个字符足以解决玩具问题,但最终不检查或不知道缓冲区限制会咬你。)但这也意味着您需要最多 198 个字符的空间加上双倍字符串的终止符.