需要解释从findString()函数返回的结果

时间:2016-10-04 21:48:55

标签: c

为什么以下findString()函数返回给定参数的指示值?

findString(" text","")返回0.

findString(""," text")返回-1。

findString("","")返回-1。

我已经阅读了strstr并查看了其他问题并且没有得到它。

// find s1 inside source, return index number if found, -1 if not found    

#include <stdio.h>
#include <stdbool.h>

int  findString (const char  source[], const char  s[])  
{  
    int  i, j, foundit = false;  

    // try each character in source   

    for ( i = 0;  source[i] != '\0'  &&  !foundit;  ++i ) {  
        foundit = true;  

        // now see if corresponding chars from s match   

        for ( j = 0;  s[j] != '\0' &&  foundit;  ++j )  
            if ( source[j + i] != s[j] || source[j + i] == '\0' )  
              foundit = false;  

        if (foundit)  
           return i;  
    }  

    return -1;  
}  

int main (void)
{
    int index;

    printf ("index = %i\n", findString("text", ""));
    printf ("index = %i\n", findString("", "text"));
    printf ("index = %i\n", findString("", ""));

    return 0;
}

2 个答案:

答案 0 :(得分:2)

  • 第一个调用返回0,因为在索引为零的任何字符串中都可以找到一个空字符串(除了代码中有错误,见下文)
  • 第二个调用返回-1,因为在空字符串中找不到非空字符串
  • 第三个调用返回-1,因为您的代码中存在错误:当未输入外部循环时(即source字符串为空),您应该添加一个特殊情况以返回{ {1}}当搜索字符串0也为空时。

答案 1 :(得分:0)

它返回map中第一次出现s的索引。如果source中不存在s,则会返回source