getline
はa stream method、またはストリームを取るstring
方法のいずれかとし、標準で実装されています。あなたは、文字列内の単語をカウントするistringstream
をシードするch
を使用することができますが、それはあなたが言葉をカウントしたいとしているものではないですので、basic_istream<CharT, Traits>& getline(basic_istream<CharT, Traits>&& input, basic_string<CharT, Traits, Allocator>& str)
が区切り文字として改行を前提としていた
。同様に、デリミタを取るgetline
は特定の文字だけを壊します。 char w[20]
がちょうど境界の書き込みのうちのために物乞いされた定義、ただ、ここで注意として
istringstream foo(ch);
for(auto i = 1; foo >> w; ++i) {
cout << i << ": " << w << endl;
}
Live Example
:代わりに、すべての空白文字で単語を分割しますどのbasic_istream& basic_istream::operator>>
を使用することができます。 ch
が空白以外の文字で満たされている場合は、少なくともw
にすべて含めるように定義する必要があります。 char w[100]
を定義することでそれを行うことができます。
しかし、w
のサイズを変更せずに誰かが来て、ch
のサイズを大きくしてしまったら、もう一度問題になるでしょう。 C++ 17では、あなたは、その前に、このchar w[size(ch)]
ようw
を定義することができますchar w[sizeof(ch)/sizeof(ch[0])]
を行うことができますしかし、あなたの最良のオプションは、彼らが動的にユーザの入力に対応するために、サイズを変更することができるようにちょうどw
とch
string
両方のを行うことが考えられます。
タイトルが間違っています。 – ZDF