2

ストリームから単一の単語を変数に解析する方法を既に尋ねましたが、それは完全に機能しますが、ユーザーが入力として与える単語の数はわかりません。それを解析して動的配列にできると思ったのですが、どこから始めればよいかわかりません。「行内の単語ごとに」と書くにはどうすればよいですか?

これは、単語を変数に解析する方法です。

string line;
getline( cin, line );
istringstream parse( line );
string first, second, third;
parse >> first >> second >> third;

ありがとう!

編集:皆さんのおかげで、私はそれを知っていると思います...そしてそれはうまくいきます!

4

4 に答える 4

5

std::vector次のように使用する可能性がありますistream_iterator

#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
    std::istringstream in(std::string("a line from file"));

    std::vector<std::string> words;
    std::copy(std::istream_iterator<std::string>(in),
              std::istream_iterator<std::string>(),
              std::back_inserter(words));

    return 0;
}

vector、ユーザーが提供する単語数に関係なく、必要に応じて拡張されます。

于 2012-05-22T11:11:27.940 に答える
5

You could use std::vector<std::string> or std::list<std::string> -- they handle the resizing automatically.

istringstream parse( line ); 
vector<string> v;
string data; 
while (parse >> data) {
  v.push_back(data);
}
于 2012-05-22T11:09:34.300 に答える
4

You can write as follows:

string line;
getline( cin, line );
istringstream parse( line );
string word;
while (parse >> word)
    // do something with word
于 2012-05-22T11:09:38.660 に答える
1

で質問にタグを付けたので、標準アルゴリズムと C++11 ラムダforeachでそれを行う方法は次のとおりです。for_each

#include <string>
#include <sstream>
#include <iostream>
#include <algorithm> // for for_each
#include <vector>    // vector, obviously
#include <iterator>  // istream_iterator
using namespace std;

int main()
{
    string line;
    vector<string> vec;
    getline(cin, line);

    istringstream parse(line);

    for_each(
        istream_iterator<string>(parse),
        istream_iterator<string>(),

        // third argument to for_each is a lambda function
        [](const string& str) {
             // do whatever you want with/to the string
             vec.push_back(str);  // push it to the vector
        }
    );
 }

Avectorはまさにあなたが求めていたものです - ほとんどの場合、C スタイルの配列よりも好むべき、動的にサイズ変更可能な配列です。コンパイル時にそのサイズを知る必要はありません。

于 2012-05-22T11:24:08.117 に答える