这两种写法的替换有什么不同,哪种效率更高


//查询字符串 
Elemtype Search_Strings(LinkList &head,char *str)
{
    LinkList p=head;
    Elemtype num=0,counts=0;
    Elemtype i,j;
    if(p==NULL)
    {
        printf("文本有误。");
        return OVER;
    }
    else
    {
    while(p!=NULL)
    {
        while(strstr(p->data,str)!=NULL)  //该字符串在总字符串中不为空 
        counts=Search_Tools(p->data,str); 
        p=p->next;
    }
        return counts;
    }
}
 //查询字符串 
void findstr(){

    PrintWord();
    char str[MAX];
    getchar();
    printf("\t\t 输入想要查找的字符串:");
    gets(str);
    printf("\t\t|>>________________________________________________<<|\n");
      struct line *info;
    int i = 0, find_len, found = 0, position;
    char substring[MAX];
    info = start;
    int find_num = 0;             //匹配到的次数 
    find_len = strlen(str);
    while (info)   //查询
    {    
        
        i = 0;  //行间循环
        while (i <= (strlen(info->text) - find_len))  //行内查找循环
        {    int k=0;
            
            for(int j=i;j// 行内的字符串从第一个开始按定长find_len赋给substring 
            {    
                substring[k] = info->text[j]; 
                k++;
            }
            if (strcmp(substring,str) == 0)
            {    
                find_num++;
            
                printf("\t\t|第%d次出现在:%d行%d列\n",find_num,info->num,(i+1+1)/2);
                found = 1;
            }
                i++;
        }
        info = info->next;
    }
    if (found)  //查找成功
        printf("\t\t|\t\t该内容出现的总次数为%d\n",find_num);
    else   //查找不成功
        printf("\t\t该内容不存在\n");
    printf("\t\t|>>________________________________________________<<|\n");
}

对计算机来说复杂度相同,都在O(n*m),但是对于人来说不管是在代码量和理解来说都更简洁高效