我的std :: string采用以下格式
std::string s = "some string with @lable"
我必须找到'@'的所有实例,然后在'@'之后找到标识符, 这个ID有一个值(在这种情况下,在一个查找表中为它存储了'lable'。然后我将用找到的值替换@和id。
例如,假设在标签字符串的过程之后ID标签的值为“1000”:"some string with 1000"
我的第一个版本使用了boost :: regex,但是在我被告知在接下来的几个版本中不允许使用新的lib之后我不得不抛弃它。
那么使用vanilla std :: string和std算法有一些优雅的方法吗?
答案 0 :(得分:10)
您可以使用std::find
搜索@
,并获取一对迭代器,这些迭代器形成一个范围,该范围从@
开始,到达下一个空格字符(或结尾)的字符串)。然后只需将迭代器传递给std::string::replace()
即可进行实际的子字符串替换。
例如:
std::string s = "some string with @lable";
std::string::iterator beg = std::find(s.begin(), s.end(), '@');
std::string::iterator end = std::find(beg, s.end(), ' ');
s.replace(beg, end, "whatever");
如果您还希望将标签或回车等内容计为空格,则可以将std::find_if
与::isspace
一起使用。
答案 1 :(得分:1)
是。使用std :: find来搜索@,然后使用std :: find来搜索空间,并将所有内容复制到一边。