0

次のような文字列をどのように(可能であれば効率的に)変換しますか

"class sfw::Smthing<class sfw::type<double>,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >"

"class sfw::Smthing<class sfw::type<...>,class std::basic_string<...> >"

C ++では、せいぜいstlを使用ていますか?

4

1 に答える 1

0

すべての作業を行うわけではありませんが、基本的な考え方は説明します。

for ループで文字列をスキャンします。現在のテンプレート引数のレベルを追跡します。を見つけたらカウントアップし、 を見つけたら'<'カウントダウンします'>'

第 2 レベル (つまり、外側の型のテンプレート引数のテンプレート引数) またはそれより深い内部にいる場合は、文字を置き換えます。ピリオドに置き換えるか、ピリオドを 3 つ以上連続して配置した場合 (別の変数が必要)、文字セットの他の場所にないことがわかっている文字に置き換えます'@'

これが完了すると、文字列は次のようになります。

"class sfw::Smthing<class sfw::type<...@@@>,class std::basic_string<...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@> >"

次に、「@」をすべて削除するだけです。

str.erase(std::remove(str.begin(), str.end(), '@'), str.end());
于 2012-12-15T05:37:38.470 に答える