1

Boost Spiritを使ってstring like"ABC10DEF20"をarrayに変換しようとしています。["ABC", 10, "DEF", 20]「区切りなし」が正しい用語かどうかはわかりませんが、空白や別の区切り文字で分割するのではなく、整数と非整数の境界で分割したいと考えています。

私は次のようなコードを思いつきました:

std::string search_str = "ABC10DEF20";
std::vector<boost::variant<std::string, unsigned int> > v;
std::string::const_iterator iter = search_str.begin();
std::string::const_iterator last = search_str.end();

bool r = parse(iter, last,
               +(+(char_ - digit)|uint_),
               v);

入力の場合、"ABC10DEF20"この結果は[ 65, 66, 67, 10, 68, 69, 70, 20 ](文字列ではなく、整数に格納された文字列部分の整数と ASCII コンポーネントのみ)。入力については、意図したとおり"10"に取得します。[ 10 ]

4

1 に答える 1

2

出力から、文字列ではなく個々の文字と完全な符号なし整数を照合していることは明らかです。

修正されるかどうかはわかりませんが、試してください:

bool r = parse(iter, last,
               +(+(+char_ - digit)|uint_),
               v);

+(前に追加されていることに注意してくださいchar_。)

のタイプをvに変更する必要がある std::vector<boost::variant<std::vector<char>, unsigned int> > v;場合があり、結果を修正する必要がある場合があります。ブーストスピリットにはあまり慣れていません。より良い、よりクリーンな方法があるに違いありません。

最終的解決:

使用する解析式を変更します。

+(as_string[+(char_ - digit)]|uint_)
于 2014-01-31T01:33:05.703 に答える