首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否删除std::string两端的子字符串?

是否删除std::string两端的子字符串?
EN

Stack Overflow用户
提问于 2019-06-06 07:23:59
回答 1查看 142关注 0票数 1

我正在尝试删除std::string中的一些开始和结束分隔符。有没有一种内置的或者更好的方法来做到这一点?

这是我目前的方式:

代码语言:javascript
复制
std::string sub = "~test.txt~";
std::string str = "~test.txt~The quick brown fox jumps over the lazy dog.~test.txt~";

str = str.substr(sub.length(), str.length() - sub.length() * 2);

开始分隔符和结束分隔符是完全相同的,并且它们位于最边缘。

期望值为The quick brown fox jumps over the lazy dog.

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 07:44:27

代码的惟一问题是,.substr()会创建一个新的std::string,从而导致昂贵的分配(除非结果足够小,可以使用单点登录)。

使用std::string_view来解决这个问题:

代码语言:javascript
复制
str = std::string_view(str).substr(sub.length(), str.length() - sub.length() * 2);

或者,使用.assign()

代码语言:javascript
复制
str.assign(str.begin() + sub.length(), str.end() - sub.length());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56469245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档