3

私はデータを読み込んで、単純な問題、データを解決しようとしています:

3               - number of lines to read in
1 1
2 2 2
3 4 

各行を入力した後、入力した数値の合計を取得したいのですが、各行の整数の数は不明です。上記のデータ画面を使用すると、次のようになります。

3               
1 1
Sum: 2
2 2 2
Sum: 6
3 4 
Sum: 7

しかし、私のアルゴリズムから、私は出力を得ました:

3
1 1
Sum: 1
2 2 2
Sum: 4
3 4
Sum: 3

コードを記述しましたが、正しく機能しません(上記のように): EDITION
コードを改善し、文字列などがなくても正しく機能することを確認しました。適切なコードは以下のとおりです。

#include<iostream>
using namespace std;
int main()
{
    int x;
    int t, sum;
    cin >> t;

    for(int i=0; i<t; i++) {
        sum=0;
        while(true)
        {
            cin >> x;
            sum = sum + x;  
            if(cin.peek()=='\n')
                break; //conditional break
        }
        cout << "Sum: " << sum << "\n";
    }
    return(0);
}
4

3 に答える 3

5

を使用して、一度に 1 行ずつ読み込み、getlineタイプ のオブジェクトに読み込みますstd::string。次に、そのオブジェクトを使用してstd::stringtype のオブジェクトを初期化しstd::istringstream、エクストラクタを使用して、int失敗するまでストリーム オブジェクトから値を読み取ります。その後、戻って次の行を読みます。だいたい:

std::string line;
while (std::getline(std::cin, line)) {
    std::istringstream in(line);
    int sum = 0;
    int value = 0;
    while (in >> value)
        sum += value;
    std::cout << sum << '\n';
}
于 2013-02-26T15:00:24.223 に答える
1

C++ には多くのツールが用意されています。

  • string文字列の寿命を管理するクラスです。
  • getlineストリームからの行 (次の改行まで) をstring.
  • istringstreamistreamを作るstring
  • istream_iteratorを繰り返しistream、指定された型を抽出し、空白で分割します。
  • accumulate範囲を区切る反復子を取り、値を加算します。

全体:

string line;
while (getline(cin, line)) {
    istringstream in(line);
    istream_iterator<int> begin(in), end;
    int sum = accumulate(begin, end, 0);
    cout << sum << '\n';
}
于 2013-02-26T15:23:05.647 に答える
0

置く

sum=0;// 頂点で

ps

while(cin.peek()!='\n'){


}
于 2013-02-26T15:01:20.887 に答える