0

重複の可能性:
C++ で文字列をトークン化するにはどうすればよいですか?

私はこのテキストファイルを持っています

q1 t q2

q2 e q3

q3 x q4

q4 t q5 q6 q11

q5 | q6 q11 

スペースで区切られた各要素を抽出したい。たとえば、1 行目では、「q1」「t」と「q2」を別々のトークンとして抽出できるようにしたいと考えています。

これには2つの方法があると思います

  1. ifstream>> を使用して、トークンごとにファイルから読み取ります。このアプローチで私が抱えている問題は、次の行に移動できるように、行の終わりに到達したタイミングを知る方法がわからないことです。

  2. もう 1 つの方法は、getline(); を使用して行全体を一度に取得することです。このアプローチの問題は、文字列を自分でトークン化する必要があり、各行が異なるため、それが最善のアイデアかどうかわかりません。strtok() 以外に、これを行う方法が組み込まれていないことにかなり驚いています。これは、私が望むものではないようです。みんなありがとう、助けていただければ幸いです。

4

2 に答える 2

3

とを使用getlineして、結果の文字列をトークン化し、それを に入れ、そこstd::stringstreamからトークンを抽出します。

std::string line_string;
while ( getline( file, line_string ) ) {
    std::istringstream line( line_string );
    std::string token;
    while ( line >> token ) {
        do something with token
    }
}
于 2012-10-15T09:30:14.447 に答える
0

標準ライブラリのみを使用したい場合はgetline、 a を使用stringstreamifstream>>て単語ごとに使用できます。

それ以外の場合、C++ は実際にはテキスト処理の点でかなり制限されており、Qt の文字列とストリーム、またはブースト (分割を含む) の文字列アルゴリズムを使用すると、STL 文字列とうまく統合できます。

于 2012-10-15T09:32:20.010 に答える