C - 搜索子字符串的函数..需要简化

时间:2016-05-09 15:29:58

标签: c string

首先,我是C的新手。所以请耐心等待。

我指的是关于指针的教程,它要求我编写一个函数来查找子字符串(如果找到,该函数应该返回原始字符串中子字符串的位置)。

我写了代码并且它完美地工作,唯一的问题是它太冗长而我想知道,如果有一种方法我可以使它不那么复杂。

以下是代码 -

  • *s - 包含字符串的基地址
  • *t - 包含子字符串的基址
  • num - 包含子字符串中的字符数(使用strlen计算)
  

char *search(char *s, char *t, int num)
{ 
    int i = 0, flag = 0;

    /* increment str1 until first matching character (of substring) is encountered */
    while((*s != *t) && (*s != '\0'))
    {
        s++;
    }

    if(*s == *t)
    {
        /* comparing the str and substr, and incrementing flag.. if flag is incremented num times, the strings match */
        while((*(s+i) == *(t+i)) && (i<num))
        {
            flag++;
            i++;
        }
    }

    if(flag == num)
        return s;
    else
        /* recursive function - str is incremented by 1, to start new comparison */
        return search((s+1), t, num);
}

任何帮助都会被贬低。提前谢谢你。

3 个答案:

答案 0 :(得分:2)

我认为你不需要特殊情况下找到第一个字符:

char * search(char *s, char *t, int num)
{
    while (*s) {
        int i;
        for (i = 0; i < num; i++) {
            if (!s[i]) {
                return NULL;
            }

            if (s[i] != t[i]) {
                break;
            }
        }

        if (i == num) {
            return s;
        }

        s++;
    }

    return NULL;
}

答案 1 :(得分:0)

我认为它已经做得很好,只是一些小事:

char * search(char *s, char *t, int num)
{ 
    int i = 0, flag = 0;

    /* increment str1 until first matching character (of substring) is encountered */
    /* It can be written on one line: */
    while((*s != *t) && (*s != '\0')) s++;

    /* comparing the str and substr, and incrementing flag.. if flag is incremented num times, the strings match */
    /* The if is not needed, a for loop is shorter: */
    for(; (*(s+i) == *(t+i)) && (i<num); flag++, i++);

    if(flag == num)
        return s;
    else
        /* recursive function - str is incremented by 1, to start new comparison */
        return search((s+1), t, num);
}

答案 2 :(得分:-2)

您可以使用strstr()函数

return strstr(s, t);

http://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm