正在学习c ++入门书。事情进展顺利,但是,当使用范围来替换所有带有空字符的标点符号时,它们将替换为空格('')。 我不明白为什么:/ 如何更改此项以便标点符号替换为无字符而不是空格?
代码:
#include <iostream>
#include <string>
#include <cctype>
using std::cout;
using std::endl;
using std::string;
int main()
{
string s1("Hi I'm Greg.");
cout << s1 << endl;
for(char &c : s1){
if(ispunct(c)){
c = '\0';
}
}
cout << s1 << endl;
return 0;
}
对不起,如果它是一个愚蠢的问题...... 干杯!
编辑: 用c ++编译14 这是我的输出:
嗨,我是Greg
答案 0 :(得分:5)
NUL角色首先是角色。这不是什么;这是一个NUL角色。也就是说,字符串“some \ 0thing”不与“某事”相同。您的特定控制台将“\ 0”字符呈现为空格,但不同的控制台可将其呈现为空。但这并没有改变NUL角色不是什么的事实。
如果你想删除一个角色,那么你要做的就是将所有以下角色都移开。
答案 1 :(得分:3)
空字符不是可打印字符。因此,您无法在控制台中看到写入cin
的空字符的任何内容。