【发布时间】:2012-02-23 11:39:39
【问题描述】:
我编写了以下代码来检查文本中是否存在 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;
}
【问题讨论】:
-
你为什么不使用
std::string?有什么特别的原因还是只是喜欢c? -
你可以使用
patt[pattLoc]而不是*(patt+pattLoc),但由于你喜欢C的部分内容,我认为textLoc应该是char *。 -
也许这是家庭作业或编码练习。
-
@Adban 等等,所以你实际上喜欢指针和原始内存管理?
-
你真的想要将
strlens移到循环之外,或者希望你的编译器很聪明。
标签: c++ string pattern-matching string-matching