C++ 標準入力まとめ

随時更新します。

あくまでAtCoderで現時点で灰色コーダーのメモです。

数字のペアが入力され、左側の数字で振り分けるとき

7
1 72
2 78
2 94
1 23
2 89
1 40
1 75
int N;
cin >> N;
vector<pair<int, int>> One(100000, {0, 0});
vector<pair<int, int>> Two(100000, {0, 0});
// 1組2組の累積和
for (int i = 0; i < N; i++) {
    int n, p;
    cin >> n >> p;
    if (n == 1) {
        One[i + 1].first = i + 1;
        One[i + 1].second = One[i].second + p;
        Two[i + 1].first = i + 1;
        Two[i + 1].second = Two[i].second;
    } else {
        One[i + 1].first = i + 1;
        One[i + 1].second = One[i].second;
        Two[i + 1].first = i + 1;
        Two[i + 1].second = Two[i].second + p;
    }
}

文字列と数値がペアで与えられるとき

5 100
p1 150
p2 80
p3 200
p4 350
p5 20
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, q;
    cin >> n >> q;
    // vectorの中にpairを入れる
    vector<pair<string, int>> NT;
    for (int i = 0; i < n; i++) {
        string s;
        int t;
        cin >> s >> t;
        NT.push_back({s, t});
    }
    
    // 出力
    for (const auto& entry : NT) {
        cout << entry.first << " " << entry.second << endl;
    }

    return 0;
}

数値と文字が一列で入力され、個数がわからないとき

1 2 + 3 4 - *
// 数値かそうでないかを判定
bool isInteger (const string input) {
    for (size_t i = 0; i < input.size(); ++i) {
        if (!isdigit(input[i])) {
            return false;
        }
    }
    return true;
}

int main() {
    string input;
    while (cin >> input) {
        if (isInteger(input)) {
            // 数値(operands)
        } else {
            // 符号(operators)
        }
    }
    return 0;
}