0

トークナイザーのようなものを書いています。boost::string_ref「トークン値」を返すために使用したいと思います。string_ref を char ごとに読み込んでから、値を含む部分文字列を返したいと思います。

非常に最小限の例を見てみましょう。

string test = "testing string";
boost::string_ref rtest(test);

//-------- and now we can go this way --------
auto begin = rtest.begin();
auto end   = rtest.end();
for(/*something*/){
    process_char(*end); // print char
    end ++;
}
// how to return rtest(begin,end)?

// -------- or this way --------
int begin = 0;
int end   = 0;
for(/*something*/){
    process_char(rtest[end]);
    end++;
}
return rtest.substr(begin, end);

コードでは、文字列を反復処理する 2 つの方法が示されています: ポインターを使用する方法と int を使用する方法です。ポインターの方法は優れていますが、ポインター間で戻る方法はなくboost::string_ref.substr、2 番目のメソッドは int を使用し、int はいくつかの数値を処理できますが、これは大きな入力ファイルでは小さすぎる可能性があります。

では、大きな入力に対してこの方法を反復することは可能ですか?

4

1 に答える 1

1

2 つのポインターを指定して部分文字列を返すには、次のようにします。

return boost::string_ref(begin, end-begin);

戻り先のスコープに参照文字列が存在することを確認してください。

于 2013-04-14T01:48:18.197 に答える