我有以下格式的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
.
归档时间: |
|
查看次数: |
3928 次 |
最近记录: |