トップページに戻る    次の競技プログラミングのテンプレートへ    前の競技プログラミングのテンプレートへ

002 競技プログラミングのテンプレート C++

数値の入力
数値の空白区切り(空白数は固定)の入力
数値の空白区切り(空白数は可変)の入力
文字列の入力
に対応した競技プログラミングのC++のテンプレートです。


C++のソース

#include <iostream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>

std::vector<std::string> GetInputValues();

std::string InputPattern = "Input1";

std::vector<std::string> GetInputValues()
{
    std::vector<std::string> InputValuesVect;

    if (InputPattern == "Input1") {
        InputValuesVect.push_back("9999"); //数値
        InputValuesVect.push_back("123 456"); //数値の空白区切り(空白数は固定)
        InputValuesVect.push_back("1 2 3 4 5 6"); //数値の空白区切り(空白数は可変)
        InputValuesVect.push_back("StrVal1"); //文字列
    }
    else { //実際の入力
        while (true) {
            std::string wkStr;
            std::getline(std::cin,wkStr);
            if(std::cin.eof()) break;
            InputValuesVect.push_back(wkStr.c_str());
        }
    }

    return InputValuesVect;
}

int main()
{
    std::vector<std::string> InputVect = GetInputValues();
    int A=atoi(InputVect.at(0).c_str());

    int B,C;
    int SpaceInd = InputVect.at(1).find_first_of(" ");

    std::istringstream iss1(InputVect.at(1).substr(0,SpaceInd));
    iss1 >> B;

    std::istringstream iss2(InputVect.at(1).substr(SpaceInd+1));
    iss2 >> C;

    std::vector<int> NumVect;
    std::istringstream iss3(InputVect.at(2));
    while(iss3.eof() == false){
        int wkInt;
        iss3 >> wkInt;
        NumVect.push_back(wkInt);
    }

    std::string S = InputVect.at(3);

    printf("1行目の内容 %d\n",A);
    printf("2行目の内容 %d %d\n",B,C);
    printf("3行目の内容 ");
    for(int I=0;I<=(int)NumVect.size()-1;I++){
        printf("%d,",NumVect.at(I));
    }
    puts("");

    printf("4行目の内容 %s\n",S.c_str());
}


実行結果

1行目の内容 9999
2行目の内容 123 456
3行目の内容 1,2,3,4,5,6,
4行目の内容 StrVal1


解説

文字列ストレームで、数値の空白区切り(空白数は可変)に対応してます。
C++編(標準ライブラリ) 第32章 文字列ストリーム