我正在閱讀string manipulations in C++。這裏筆者提出的一塊,如果有兩個空格的字符串這是檢驗碼,看看string :: find中是否有兩個空格,這個代碼中的錯誤?
string text;
getline (cin, text);
string::size_type position = text.find (' ');
if (position != string::npos)
{
if (text.find (' ', position+1) != string::npos)
{
cout << "Contains at least two spaces!" << endl;
}else
{
cout << "Contains less than two spaces!" << endl;
}
}else
{
cout << "Contains no spaces!" << endl;
}
筆者指出,有在上面的代碼中的錯誤。但是我看不到它,代碼對我來說看起來很不錯。我錯過了什麼嗎?
我可以看到的唯一問題是,如果第一個空格是字符串的最後一個字符... – tangrs
從網頁:_這個可選參數的要求是它必須指示字符串中的有效位置,這意味着該值必須介於0和length-1_之間。 「位置+1」是否保證在該範圍內? – Barmar
是的,作者說。但是'std :: string :: find'實際上接受的數字大於字符串的長度,如[這裏](http://www.cplusplus.com/reference/string/string/find/) – Allanqunzi