从字符串中删除空格未生效



我正在尝试删除除字母以外的所有字符和空格。但是"擦除空间"部分没有生效,只有在我评论删除字符部分时,它才会生效。

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

您正在用nuls替换所有非字母字符,然后删除所有空格。由于NULS不是空间,因此后一个步骤无济于事。如果将循环中的作业更改为

s[i] = ' ';

您将用空格替换它们,然后由eraser(remove

删除。

如果要使代码更可读,则可以用

替换复合物
if (!isalpha(s[i]))

,或者您甚至可以用

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

,因此您用''替换了不想要的字符。

然后您删除了所有' '字符。

最后阶段可能涉及''&Hellip;

为了将来的读者的利益:在C 20中,我们有统一的擦除,因此我们可以简单地使用

std::erase_if(s, [](unsigned char c) { return !std::isalpha(ch); });

(请参阅我需要在打电话给toupper((,tolower((等人之前施放未签名的char? 为何应使用unsigned char(

相关内容

  • 没有找到相关文章

最新更新