簡體   English   中英

在字符串上使用 getline

[英]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標准實現。

也就是說,您可以使用chistringstream設置種子以計算字符串中的單詞數,但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])]
但是您最好的選擇可能是同時制作wch string以便它們可以動態調整大小以適應用戶輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM