[英]Using getline on a string
如何使用getline()
從存儲在字符串中的一行讀取單詞?
例如:
char ch[100],w[20];
cin.getline(ch,100);
現在我可以使用getline
來計算ch
的單詞數嗎? 我不想使用分隔符直接從ch
計算單詞。 我想從ch
讀取單詞並將它們存儲在w
。
我曾嘗試在getline
使用ch
作為參數。
getline
在標准中作為流方法或采用流的string
方法實現: http : //en.cppreference.com/w/cpp/string/basic_string/getline
沒有不需要流的getline
標准實現。
也就是說,您可以使用ch
為istringstream
設置種子以計算字符串中的單詞數,但basic_istream<CharT, Traits>& getline(basic_istream<CharT, Traits>&& input, basic_string<CharT, Traits, Allocator>& str)
假設一個換行符作為分隔符,因此這不是您想要計算單詞的內容。 同樣,帶有分隔符的getline
只會在特定字符上中斷。 相反,您可以使用basic_istream& basic_istream::operator>>
它將在所有空白字符上拆分單詞:
istringstream foo(ch);
for(auto i = 1; foo >> w; ++i) {
cout << i << ": " << w << endl;
}
就像這里的注釋一樣,定義char w[20]
只是乞求越界寫入。 您至少需要這樣定義,如果ch
填充了非空白字符,則w
可以包含所有內容。 您可以通過定義char w[100]
來做到這一點。
但是如果有人來增加ch
的大小而不改變w
的大小,那么你又會遇到麻煩。 在 C++17 中,你可以像這樣定義w
char w[size(ch)]
之前你可以做char w[sizeof(ch) / sizeof(ch[0])]
但是您最好的選擇可能是同時制作w
和ch
string
以便它們可以動態調整大小以適應用戶輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.