我编写了以下代码,以检查文本中是否存在一个certin字符串。问题在于,即使文本中存在模式,match()函数也总是返回false

int main(){

    char *text="hello my name is plapla";
    char *patt="my";

    cout<<match(patt,text);

    system("pause");
    return 0;
}

bool match(char* patt,char* text){

    int textLoc=0, pattLoc=0, textStart=0;
    while(textLoc <= (int) strlen(text) && pattLoc <= (int)strlen(patt)){
        if( *(patt+pattLoc) == *(text+textLoc) ){
            textLoc= textLoc+1;
            pattLoc= pattLoc+1;

        }

        else{
            textStart=textStart+1;
            textLoc=textStart;
            pattLoc=0;
        }

    }
    if(pattLoc > (int) strlen(patt))
        return true;
    else return false;
}

最佳答案

pattLoc < (int)strlen(patt)循环中尝试whilepattLoc == 2时,循环将停止,因此避免将'\0'"my"' '"hello my name is pala"进行比较,后者将pattloc设置为0return false

或者,最好使用字符串substr

10-06 11:26