2013-10-20 66 views
2

給定ci_string的定義從cpp.reference.com,我們將如何執行操作符>>?我在它參與的std ::閱讀的嘗試,但它似乎沒有工作(即gcount的()正確計算輸入的字符數,但沒有輸出)重載操作符>>對於不區分大小寫的字符串

#include <iostream> 
#include <cctype> 
#include <string> 

// ci_string definition goes here 

std::istream& operator>>(std::istream& in, ci_string& str) 
{ 
    return in.read(&*str.begin(), 4); 
} 

int main() 
{ 
    ci_string test_str; 
    std::cin >> test_str; 
    std::cout << test_str; 
    return 0; 
} 

回答

4

如何

std::istream& operator>>(std::istream& in, ci_string& str) 
{ 
    std::string tmp; 
    in >> tmp; 
    str.assign(tmp.begin(), tmp.end()); 
    return in; 
} 
+0

Splendid!謝謝你,@丹尼爾弗雷。 – TheSOFan

+3

如果你打算去那條路線,我會使用'str.assign(tmp.begin(),tmp.end())',而不是'c_str'的​​解決方案。爲什麼當你知道它時重新計算目標的長度? –

+0

@JamesKanze它的可讀性不好,但是一個好主意。我只是想知道今天的編譯器是否足夠聰明,可以直接從上面的代碼中的'tmp'獲取長度作爲優化。 –

相關問題