2013-07-30 87 views
-1

我在使用std::string::find()时遇到了一些对我没有多大意义的东西我希望这里有人能够发现我错误:std :: string :: find()不能使用std :: string作为参数

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 
} 
+1

这很好吗?这意味着它总是会发现它 –

+6

..?因为某些原因? 'PFAIL \ n'包含'PFAIL'。你还想要什么其他理由? – Rapptz

+1

如果找不到匹配项,'std :: string :: find' **返回**'string :: npos' – P0W

回答

5

也许你应该考虑使用直接的逻辑你的if语句:

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

这个逻辑表达式可能会潜在地混淆你。如果find的返回值等于std::string::npos,则在response字符串中找不到testString变量中的字符串。

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

+0

好吧,逻辑不会让我困惑...即使响应中包含“PFAIL”,它也不会在将“PFAIL”作为std :: string传递时发现它......如果我将“PFAIL”传递给作为一个c_str()它每次都找到它 – blast7

3

你的状况是你看起来期待的错误方式。如果没有找到,则返回npos。由于回复中明确包含测试,npos将不会被退回,并且if的主体将被输入。

+0

是的,这是我在输入问题时犯的一个错误....当时我有一个人在我的魔方...我有点分心,......对不起 – blast7

相关问题