2016-03-23 17 views
-2

getline()を使用して、文字列に格納された行を単語で読み取るにはどうすればよいですか?例えば文字列にgetlineを使用する

char ch[100],w[20]; 
cin.getline(ch,100); 

は、今私はch内の単語の数をカウントするgetlineを使用することができますか?私は直接chから単語をカウントする区切り文字を使用する必要はありません。私はchから単語を読み、wに保存したいです。

getlinechをパラメータとして使用しようとしました。 http://en.cppreference.com/w/cpp/string/basic_string/getline

ストリームを必要としないgetlineの標準的な実装ではありません。

+0

タイトルが間違っています。 – ZDF

答えて

1

getlinea 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])]
を行うことができますしかし、あなたの最良のオプションは、彼らが動的にユーザの入力に対応するために、サイズを変更することができるようにちょうどwchstring両方のを行うことが考えられます。

関連する問題