【发布时间】:2014-03-26 15:35:16
【问题描述】:
我正在做一个小测试,看看一个词是否在另一个词中,我想返回那个词开始的索引。
示例:如果我在“amolum”中检查“um”,则返回值应为 4(单词开头的字母“u”的位置。
这是我的代码的样子:
(...)
int cad_look_str (char s1[], char s2[]) {
int indS1 = 0, indS2 = 0;
while (s1[indS1]!='\0'|| s2[indS2]!='\0') {
if (s1[indS1]==s2[indS2]) {
indS1++;
indS2++;
}
else indS1=0;
}
if (s2[indS2]=='\0' && s1[indS1]!='\0') return -1;
else return indS2-strlen (s1);
}
void main () {
char s[100];
char s1[100];
scanf ("%s",s);
scanf ("%s",s1);
printf ("%d \n", cad_look_str(s1,s) );
}
问题是当我编译它时,它并没有停止在 scanf 上循环......它只是继续询问字符串。
如果我将 cad_look_str(s1,s1) 放在最后一行,它可以正常工作...为什么会这样?
问候
【问题讨论】:
-
你忘记在 else 中使用 indS2++(否则你会永远卡在那里)
-
@Inox yeap 在 David 的帮助下发现了这一点:P 谢谢
-
-
我认为现在的问题是你在'gdgddadada'的第一个索引位置找到了一个与'd'字符匹配的initial,但下一个索引失败,因此您应该将目标字符串索引重置为 0,以确保在搜索字符串的开头重新开始搜索...也就是说,一旦您 开始 匹配,如果匹配最终在比较整个字符串之前失败,你必须意识到这一点。可能需要在那里添加一些额外的控制逻辑。
-
@DavidW 是的,它有帮助。对于这种情况,我已经实施了一个控制。 " else if ( s1[0] == s2[indS2] ) {indS1=1; indS2++;} else{indS1=0; indS2++;}"
标签: c