【问题标题】:Finding a substring within a string in C在C中的字符串中查找子字符串
【发布时间】:2014-10-07 19:02:35
【问题描述】:

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

#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[i ] != 子[j]。我担心它可能会导致运行时间不是 O(n)。

P.s 这不是家庭作业问题。我只是在练习问题。

【问题讨论】:

  • 只有一个循环,它遍历原始字符串。 j 在这里无关紧要,因为它不会影响循环的迭代次数。这是O(n)
  • 可能有助于看看会发生什么,如果您将 printf("i=%d j=%d at line %d\n", i, j, __LINE__); 添加到两个内部 if-else 的每个“then”和“else”分支(所以添加 else到第一个)。

标签: c string substring


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-06-01
    • 2012-11-10
    • 2015-06-10
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多