2

重複の可能性:
C++で文字列を分割する

各行にコンマとスペースで区切られた15個のフィールドがあるファイルからデータを読み取ろうとしています。データは単一のタイプではありません。現在私が行っているのは、データを1行ずつ読み取り、各行をistringstreamに渡し、各読み取りの間に次のことを行います。

ins.ignore(25,','); //ins is the istringstream

しかし、私は自分の方法が好きではなく、よりクリーンな方法を望んでいます。それを行うためのより良い方法は何でしょうか?また、stlのみを使用し、外部ライブラリは使用しません。基本的に私が欲しいのは、区切り文字としてコンマを使用して各行をトークン化することです。

4

2 に答える 2

3

カスタム マニピュレータを使用するだけです。

std::istream& comma(std::istream& in) {
    if ((in >> std::ws).get() != std::char_traits<char>::to_int_type(',')) {
        in.setstate(std::ios_base::failbit);
    }
    return in;
}
...
in >> v0 >> comma >> v1 >> comma ...
于 2012-11-23T06:37:45.893 に答える
0

よりクリーンな方法(私が正しく理解している場合)は、カンマをダミー変数に読み込むだけです

char comma;
ins >> comma;

これにより、空白がスキップされ、カンマが読み取られるため、無視できます。

于 2012-11-23T06:34:45.907 に答える