2013-07-30 133 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

相關問題