首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erase()不工作C++

Erase()不工作C++
EN

Stack Overflow用户
提问于 2017-04-27 16:54:08
回答 3查看 1.8K关注 0票数 0

给定一个名为question = " this isn't a relevant question , is it??? "的字符串。您必须将连续的空格仅替换为一个空格。我有一个想法,在std::string中使用erase(),但是我不知道为什么它不能工作。下面是我的代码:

代码语言:javascript
复制
    for (int i = 1; question[i]; i++)
        while (question[i] == ' ' && question[i - 1] == ' ')
             question.erase(i, 1);
EN

回答 3

Stack Overflow用户

发布于 2017-04-27 16:56:00

如果你已经删除了一个元素,你不应该增加i。如果这样做,您将跳过元素。

此外,如果字符串以两个空格结束,您的特殊停止条件将导致空白字符串上的未定义行为。

票数 3
EN

Stack Overflow用户

发布于 2017-04-27 17:53:28

您可以通过以下方式在<algorithm>中使用unique

代码语言:javascript
复制
std::string::iterator it = std::unique(question.begin(), question.end(), [](const char& a, const char & b) { return ((a == ' ') && (b == ' ')); });

std::string output_string(question.begin(), it);
票数 3
EN

Stack Overflow用户

发布于 2017-04-27 17:12:09

如果你真的想要C++,那就使用正则表达式。

代码语言:javascript
复制
#include <regex>
std::string question=" this      isn't a   relevant question , is it???     ";
std::string replaced = std::regex_replace(question, std::regex(" +"), " ");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43653078

复制
相关文章

相似问题

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