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 循环扫描字符串。跟踪您所处的模板参数级别。您可以通过在找到 a 时计数,在找到 时倒数来做到这'<'一点'>'

当您在第 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 回答