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