使用stl替换嵌套的子字符串

replace nested substring using the stl

本文关键字:字符串 嵌套 stl 替换 使用      更新时间:2023-10-16

如何(如果可能的话)转换这样的字符串

"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?

我不会为你做所有的工作,但我会给你基本的想法。

使用for循环扫描字符串。跟踪你所处的模板参数级别。你可以通过在找到'<'时向上计数,在找到'>'时向下计数来做到这一点。

当您在第二级(即外部类型的模板参数的模板参数)或更深层次时,请替换该字符。将其替换为句点,或者,如果您放置了3个或更多连续的句点(需要另一个变量),则将其替换为由您知道不会出现在字符集中其他位置的字符,如'@'

一旦你完成了,你的字符串会像这样:

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

然后你所需要做的就是删除每个"@":

str.erase(std::remove(str.begin(), str.end(), '@'), str.end());