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

Eli*_*Eli 1 c++ string stl

我有以下格式的std :: string

std::string s = "some string with @lable"   
Run Code Online (Sandbox Code Playgroud)

我必须找到'@'的所有实例然后在'@'之后找到标识符,这个ID有一个值(在这种情况下'lable'在查找表中存储.我将替换@和具有找到值的id.

例如,假设在标签字符串的过程之后,ID标签的值为"1000":

"some string with 1000"
Run Code Online (Sandbox Code Playgroud)

我的第一个版本使用了boost :: regex,但是在我被告知在接下来的几个版本中不允许使用新的lib之后我不得不抛弃它.

那么使用vanilla std :: string和std算法有一些优雅的方法吗?

Cha*_*via 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");
Run Code Online (Sandbox Code Playgroud)

如果您还想将制表符或回车符等内容计为空格,则可以std::find_if同时使用::isspace.