【问题标题】:program to check for substring. What's wrong检查子字符串的程序。怎么了
【发布时间】:2012-02-17 18:32:04
【问题描述】:

检查第二个字符串是否是第一个字符串的子字符串的程序。它在所有情况下都显示“是”,此外,每当我将第二个字符串作为“q**q”时,我都会收到运行时错误,为什么会这样..? * 代表任何字母。

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char str1[20], str2[20];
    int l1, l2, i1, i2=0;
    gets(str1);
    gets(str2);
    l1=strlen(str1);
    l2=strlen(str2);
    if(l1>=l2)
    {
        for(i1=0; i1<=l1-l2+i2, i2<l2; i1++)
        {
            if(str2[i2]==str1[i1])
            i2++;
        }
        if(i2==l2)
            printf("Yes");
        else
            printf("No");
    }
    else
        printf("No");

    getch();

    return 0;
}

【问题讨论】:

  • 你的代码真的是这样缩进的吗?先修复它,它会更具可读性。
  • 你可以使用char *strstr( const char *s1, const char *s2)string.hlink中定义的函数。或者您正在努力实现这一目标以学习和练习 C?
  • 要找到这样的错误,你应该使用调试器,看看错误发生在哪里,此外,尽量不要使用带有l和1的变量,它看起来一样,而且很混乱。我建议您阅读“代码完整”,这是一本很棒的书,它将为您提供代码可读性的最佳实践

标签: c string substring runtime-error


【解决方案1】:

for 语句中的条件

for(i1=0; i1<=l1-l2+i2, i2<l2; i1++)

真的没有意义。代码i1&lt;=l1-l2+i2, i2&lt;l2 计算逗号前的部分,丢弃结果,然后计算逗号后的部分。

也许你打算写i1&lt;=l1-l2+i2 &amp;&amp; i2&lt;l2

【讨论】:

    【解决方案2】:
     int substring(char *s,char *t)
             {
                    int i, j, k;
    
                    for (i = 0; s[i]; i++)
                    {   for (j = i, k = 0; t[k] && s[j] == t[k]; j++, k++)
                            ;
                        if (k > 0 && !t[k])
                            {
                                 return i;
                            }
    
                           return -1;
                   }
            }
    

    这是工作代码... 由于您的解决方案失败了 输入字符串——anshulanananans,搜索字符串——anans

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 1970-01-01
      • 2014-07-23
      • 2013-11-12
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多