std :: string :: find()不使用std :: string作为参数

时间:2013-07-30 19:01:06

标签: c++ stdstring

在使用std::string::find()时,我遇到了一些对我没有多大意义的事情我希望这里有人能够发现我的错误:

std::string testString = "PFAIL";
std::string response = "PFAIL\n";

if( response.find(testString) != std::string::npos )
{
    //do something
}

此代码由于某种原因绝不会发出//do something条评论。有什么想法吗?

编辑:我的意思是它永远不会碰到//do something代码块,它应该如果我用以下方式表达它就会这样做:

if( response.find( testString.c_str() ) != std::string::npos )
{
    // do something
}

2 个答案:

答案 0 :(得分:5)

也许您应该考虑在if语句中使用直接逻辑:

if( response.find(testString) == std::string::npos )

这种逻辑表达可能会让你更加困惑。如果find的返回值等于std::string::npos,则testString字符串中未找到response变量中的字符串。

编辑:我的逻辑以错误的方式回答。

答案 1 :(得分:3)

你的情况与你期望的情况有关。如果找不到任何内容,则会返回npos。由于回复明确包含测试,因此不会返回npos,并且会输入if的正文。