Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中的字符串中查找子字符串_C_String_Substring - Fatal编程技术网

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

在C中的字符串中查找子字符串,c,string,substring,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){

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

#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;
}
#包括
无效查找子字符串(char*str,char*sub){
int start=0;
int end=0;
int i=0,j=0;
而((str[i]!='\0')){
if(str[i]==sub[j]){
如果(j==0){
开始=i;
}
i++,j++;
}如果(str[i]!=sub[j]){
j=0;
if(str[i]==sub[j]){
开始=i;
j++,i++;
}否则{
i++;
}
}
if(sub[j]=='\0'){
结束=i-1;
printf(“开始是:%d,结束是:%d\n”,开始,结束);
返回;
}
}
printf(“在字符串%s中找不到子字符串%s\n”,sub,str);
返回;
}
int main(){
char str[]=“互联网”;
char sub[]=“净”;
查找子字符串(str,sub);
返回0;
}
我认为运行时间是O(n),但我不确定,因为在else-if语句中,每当我看到str[I]!=sub[j]。我担心这可能会导致运行时间不是O(n)


这不是一个家庭作业问题。我只是在练习问题。

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

只有一个循环,它在原始字符串上迭代
j
在这里并不重要,因为它不会影响循环的迭代次数。它是
O(n)
。如果添加
printf(“i=%d j=%d在第%d\n行”,i,j,uu行),可能有助于了解发生了什么到两个内部if-else的每个“then”和“else”分支(因此将else添加到第一个分支)。