在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添加到第一个分支)。