【问题标题】:How to return value using strstr function?如何使用 strstr 函数返回值?
【发布时间】:2014-04-25 20:40:16
【问题描述】:

问题是输入两个字符串:S1 和 S2。目的是查找是否存在子字符串,我知道可以使用strstr。如果存在子字符串,则在 S1 处打印匹配的索引,否则打印 -1 。虽然知道有没有子串strstr返回第一个索引值,但是不知道怎么用。

我的代码是:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[20],s2[20];
    char x;
    gets(s1);
    gets(s2);
    x=strstr(s1,s2);
    if(strstr(s1,s2)==NULL)
    printf("-1");
    else
    printf("%s",x);
    return 0;
}

【问题讨论】:

  • Guyz,即使我使用指针,我也会从编译器收到警告:程序:在函数'main'中:程序:15:5:警告:函数'strstr'的隐式声明[-Wimplicit-function -declaration] 程序:15:7:警告:内置函数“strstr”的不兼容隐式声明 [默认启用] 使用 dev cpp
  • 奇数。也许改用#include &lt;strings.h&gt;(即使你所拥有的应该是正确的)。

标签: c


【解决方案1】:

x 需要是一个指针:

char *x;

然后:

x=strstr(s1,s2);

指向s1s2 内的位置,或NULL。如果需要索引,可以写:

int indx = x ? x - s1 : -1;
// ...
printf("%d\n", indx);

顺便说一句,作为标准建议,您应该使用fgets() 而不是gets()

【讨论】:

  • 可能是真的,但这不是问题的答案
  • @TimCastelijns 这是一个很好的答案
  • @Joseph Quinsey 谢谢 :)
  • 另外,必须使用 if 语句而不是条件运算符,因为在线编译器有问题!
  • @Roma:在线编译器有点奇怪。您在另一个问题中提到您还使用 DEV c++ 和 turbo c++。他们是如何在这里工作的?
【解决方案2】:

您的代码几乎可以正常工作。 strstr 返回应该存储在指针中的地址。但是您存储在字符变量中。所以把char x改成char *x

【讨论】:

    【解决方案3】:

    来自这篇文章

    使用指针减法。

    char *str = "sdfadabcGGGGGGGGG";
    char *result = strstr(str, "abc");
    int position = result - str;
    int substringLength = strlen(str) - position;
    

    Get index of substring

    【讨论】:

      【解决方案4】:

      strstr() 返回一个指向第一次出现的子字符串的 char* 指针。需要减去数组的起始地址才能得到位置作为索引

      #include<stdio.h>
      #include<string.h>
      int main()
      {
          char s1[20],s2[20];
          char *x;
          gets(s1);
          gets(s2);
          x=strstr(s1,s2);
          if(strstr(s1,s2)==NULL)
          printf("-1");
          else
          printf("%d",x-s1);
          return 0;
      }
      

      另外,我建议您不要使用gets,因为这是一个坏习惯。请改用 fget。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        相关资源
        最近更新 更多