在C中查找字符串中的子字符串

时间:2014-10-07 19:02:35

标签: c string substring

给定一个字符串数组,我试图找到给定子字符串开始和结束的索引。 这是我的代码:

#include <stdio.h>

void find_sub_string(char *str, char *sub){
    int start= 0;
    int end = 0;
    int i=0,j=0;

    while((str[i] != '\0') ){

        if( str[i] == sub[j]){
            if(j == 0){
                start = i;
            }

            i++,j++;

        } else if(str[i] != sub[j]){
            j=0;
            if(str[i] == sub[j]){
                start = i;
                j++,i++;
            } else{
                i++;
            }
        }

        if (sub[j] == '\0'){
            end = i-1;
            printf("The start is: %d ,and end is : %d\n",start,end);
            return;
        }
    }

    printf("The substring %s was not found in string %s\n",sub,str);
    return;
}


int main(){
    char str[] = "internet";
    char sub[] = "net";

    find_sub_string(str,sub);

    return 0;
}

我认为运行时间是O(n),但我不相信,因为在else if语句中,每次看到str时我都会回到子串(j = 0)的开头[i]!= sub [j]。我担心它可能导致运行时间不是O(n)。

P.s这不是一个功课问题。我只是在练习问题。

1 个答案:

答案 0 :(得分:2)

外部循环将运行O(n)次,因为i总是递增一次并且受到字符串大小的限制。在循环的每次迭代中完成的操作数是有界常量,因为其中的每个语句最多可以运行一次,并且每个语句执行固定的工作量。因此代码是O(n)。