2011-03-24 92 views
1

在應用中的完整代碼是str.find()似乎被忽略的第一個字符的字符串

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string str = "Insert"; 
    int kint = 0; 

    if (kint == 0 && str.find("Insert")) 
    { 
     cout << "found" << endl; 
    } 

return 0; 
} 

沒有COUT不斷髮生。如果你搜索「nsert」,那麼cout就會發生。

我缺少什麼?

回答

6

你錯過了一個事實,即當find不返回任何東西時,它返回npos不爲零。的返回值爲0意味着它發現,它正在以指數爲0。

if (kint == 0 && str.find("Insert) != string::npos) { ... } 

[注意尋找:約15秒,這樣的回答聲稱,錯誤地認爲str.find()回報str.end()失敗。這是垃圾。我的道歉,如果任何人都讀錯了版本,並認爲它]

+0

我懷疑我是個白癡。乾杯 – gh33 2011-03-24 12:51:41

1

看看什麼find函數返回。

返回值第一 發生 的字符串中的位置搜索的內容。如果未找到內容 ,則返回成員值npos爲 。

既然你搜索「插入」則返回0,如果失敗

0

實際上它返回的位置,這是你的情況0。 0被轉換爲假...... 看here

您需要檢查str.find("Insert") != std::string::npos您的if語句

0

find()方法返回找到字符的位置。所以第一個char的位置是0,在boolean中轉換爲false。 你應該與npos比較

if (kint == 0 && str.find("Insert") != str::npos) 
{ 
    cout << "found" << endl; 
}