Erase()不适用于C ++

时间:2017-04-27 08:54:08

标签: c++ string erase

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

    for (int i = 1; question[i]; i++)
        while (question[i] == ' ' && question[i - 1] == ' ')
             question.erase(i, 1);

3 个答案:

答案 0 :(得分:3)

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

此外,您的花哨停止条件将导致空字符串的未定义行为,以及字符串以两个空格结束的情况。

答案 1 :(得分:3)

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

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);

答案 2 :(得分:2)

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

#include <regex>
std::string question=" this      isn't a   relevant question , is it???     ";
std::string replaced = std::regex_replace(question, std::regex(" +"), " ");