2010-12-08 32 views
1

我試圖編寫一個程序來返回字符串中的字符數。在我編寫程序時,我注意到字符串類中存在一個錯誤。如果字符串中有空格,String.size()會返回不正確的數字

說我的程序是這樣的:

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string input; 

    cout << "Input string: "; 
    cin >> input 

    cout << "Number of characters: " << input.size() << endl; 

    return 0; 
} 

如果我輸入測試字符串,我應該看到作爲輸出的數量。

然而,輸出我得到的是這樣的:

Number of characters: 4 

好像大小()方法時,有字符串中的空間不起作用。

我的問題是,是否有另一種方法來獲取字符串中的字符數?我嘗試了length()方法,但結果是一樣的。

+3

更可能的是,標準庫中的錯誤或代碼中的錯誤? – 2010-12-08 23:52:16

+4

`我注意到字符串類中存在一個錯誤。'不,不存在 – Falmarri 2010-12-08 23:52:21

+5

規則1:它不是編譯器,它就是你。 – 2010-12-08 23:52:37

回答

13

那是因爲你的

cin >> input; 

只讀取到第一個空格字符。 如果你想獲得一整行,使用下面的代碼:

std::string s; 
std::getline(std::cin, s); 
5

這是不是一個錯誤,並且更具體地,實際上已經無關String類。

它與istream類(cin)有關。 cin的操作符>>執行「格式化輸入」,也就是說,輸入由空白分隔。在你敲回車後,你將「測試」讀入一個字符串,在輸入緩衝區中留下「字符串」。 「測試」實際上是四個字符。

考慮使用std :: getline或istream :: getline來讀取具有更多控件的整行輸入。請務必仔細閱讀這些方法的文檔,因爲它們與輸入流中留下的內容有不同的行爲,如果與oeprator >>用法混合在一起,那麼可能會導致您不會期望的結果。

4

這是cin >> input的含義的結果,當發現任何空格時停止讀取。如果您想繼續閱讀直到行尾,請嘗試getline

0

輸入正確後,您可以通過使用strlen(string_name)來獲取字符串或char指針(char *)的長度(包括空格),這將返回長度。

相關問題