简单的通配符与std :: string匹配

时间:2009-12-13 14:28:55

标签: c++ string stl

我的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算法有一些优雅的方法吗?

2 个答案:

答案 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来搜索空间,并将所有内容复制到一边。