【发布时间】:2020-05-06 15:39:56
【问题描述】:
我需要找到并删除字符串的一部分(子字符串)。 string_view 似乎是个好主意,但我无法让它与 string::erase 一起使用:
// guaranteed to return a view into `str`
auto gimme_gimme_gimme(const std::string& str) -> std::string_view;
auto after_midnight(std::string& str)
{
auto man = gimme_gimme_gimme(str);
str.erase(man); // way to hopeful, not a chance though
str.erase(man.begin(), man.end()); // nope
str.erase(std::distance(str.begin(), man.begin()), man.size()); // nope
str.erase(std::distance(str.data(), man.data()), man.size()); // nope again
// for real???
}
我是不是想多了?给定一个std::string_view 到一个std::string 如何擦除字符串的那部分?还是我滥用string_view?
【问题讨论】:
-
我不会在这里使用 string_view。我要么返回一个
pair<size_t, size_t>,其中first是子字符串的索引,second是长度,或者只是修改gimme_gimme_gimme以实际进行擦除。 -
当您说“擦除字符串的一部分”时,您是什么意思?如果字符串是“abbabca”,而字符串视图是“ab”,那么你到底想删除什么?
-
@eerorika 一个子字符串。在您的示例中,如果我了解视图位于字符串的前两个字符中,则擦除会给出
"ba" -
@bolov 我编辑了我的评论
-
@eerorika 哦,我明白了。我的意思是原始字符串的子字符串。
string_view是原始字符串的视图,它不指向另一个对象。
标签: c++ string c++17 string-view