1

私の入力ファイルは、スペースで区切られた数字を持つ 2 行で構成されています。両方の行から数値を読み取り、2 つの異なるstd::vectors に格納する必要があります。しかし、各行にいくつの数字があるかわかりません。最初の行を読みながら、2 行目の数字も読み始めないようにするにはどうすればよいですか? それらを文字列として読み取り、「\n」文字をチェックしようとしましたが、機能しません....

    cin>>str;
    while(str[0]!='\n' && str!="") {
        sscanf(str.c_str(),"%d",&num); 
        numz.push_back(num); //numz is the vector for the first line of numbers
        cin>>str;
    }

これを行うためのきちんとした方法はありますか?

4

2 に答える 2

3

以下は、行をベクトルに読み込みます。もちろん、エラーチェックを追加する必要があります。

std::vector<int> readnumline(std::istream& is)
{
  std::string line;
  std::getline(is, line);
  std::istringstream iss(line);
  int num;
  std::vector<int> result;
  while(iss >> num)
    result.push_back(num);
  return result;
}

2 つのベクトルを読み取るには、次を使用できます。

std::vector<int> v1(readnumline(std::cin));
std::vector<int> v2(readnumline(std::cin));
于 2013-06-18T21:58:01.420 に答える
3

#include <sstream>にアクセスしstd::istringstreamます。
次に、コードは次のようになります。

std::string line1;
std::string line2;

std::getline(std::cin, line1);
std::getline(std::cin, line2);

int x;
std::vector<int> v;
std::istringstream iss(line1);
while (iss >> x) {
    v.push_back(x);
}

最初に を使用して 2 行を読み取りgetline、次にオブジェクトを作成するistringstreamと、 と同じように機能しstd::cinます。

于 2013-06-18T21:51:47.417 に答える