0

getline を使用して次の行を読み込もうとしています

(15,0,1,#)

(2,11,2,.)

(3,20,0,S)

整数をintとして、文字をcharとして抽出できるようにしたいのですが、それらのみを抽出する方法がわかりません。

4

2 に答える 2

3

セパレーター、つまり、、、を読み取ってから'('')'フォーマット','された入力を使用できるようです。マニピュレータに単純なテンプレートを使用すると、うまくいくはずです。

#include <iostream>
#include <sstream>

template <char C>
std::istream& read_char(std::istream& in)
{
    if ((in >> std::ws).peek() == C) {
        in.ignore();
    }
    else {
        in.setstate(std::ios_base::failbit);
    }
    return in;
}

auto const open_paren  = &read_char<'('>;
auto const close_paren = &read_char<')'>;
auto const comma       = &read_char<','>;

int main()
{
    int x, y, z;
    char c;
    std::istringstream in("(1, 2, 3, x)\n(4, 5, 6, .)");
    if (in >> open_paren >> x
           >> comma >> y
           >> comma >> z
           >> comma >> c
           >> close_paren) {
        std::cout << "x=" << x << " y=" << y << " z=" << z << " c=" << c << '\n';
    }
}
于 2013-09-26T18:36:49.167 に答える
-1

getline() の 16 進値から取得した値を比較し、いくつかのifステートメントを実行して ASCII と比較します。数字、文字、または記号をつかんだかどうかがわかります。

于 2013-09-26T18:30:22.557 に答える