c++ - 从字符串中删除空格不生效

标签 c++ stdstring

我正在尝试删除除字母以外的所有字符和空格。但是“删除空格”部分不生效,只有我注释掉删除字符部分才会生效。

for (int i = 0; i < s.size(); i++)
    {
        if (!(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z'))
        {
            s[i] = '\0';
        }

    }

s.erase(remove(s.begin(), s.end(), ' '), s.end());

最佳答案

您要用 NUL 替换所有非字母字符,然后删除所有空格。由于 NUL 不是空格,因此后一步什么都不做。如果您将循环中的赋值更改为

s[i] = ' ';

您可以用空格替换它们,然后用 eraser(remove

如果你想让代码更具可读性,你可以将复杂的 if 替换为

if (!isalpha(s[i]))

或者你甚至可以用

替换整个东西
s.erase(remove_if(s.begin(), s.end(), [](char ch){ return !isalpha(ch); });

关于c++ - 从字符串中删除空格不生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57340958/

相关文章:

linux - 将缓冲区或 C 字符串复制到 std::string 的最快方法

c++ - 使用 std::string 作为缓冲区有缺点吗?

c++字符串到char *的隐式转换匹配错误的函数签名

c++ - 来自 API 的错误代码......处理的最佳做法是什么

c++ - 在 C++ 中将对插入到映射中

c++ - 带有 %s 和 std::string 的 sprintf 给出乱码

c++ - 如何强制 std::stringstream operator >> 读取整个字符串?

c++ - 什么是 __ext_vector_type__ 和 simd?

c++ - 使用 shmat 和 shmget 与 forks 相乘矩阵

c++ - 如何在输出文件中创建行?