c++ - 如何制作空字符?

标签 c++ c++14

刚刚阅读了 C++ 入门书。事情进展顺利,但是,当使用范围 for 以将所有标点符号替换为空字符时,它们将替换为空格 (' ')。 我不明白为什么:/ 我该如何更改它,以便标点符号被替换为无字符,而不是空格?

代码:

#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 中编译 这是我的输出:

Hi I m Greg

最佳答案

NUL 字符首先是一个字符。这不是什么;这是一个 NUL 字符。也就是说,字符串“some\0thing”与“something”不是相同的东西。您的特定控制台将“\0”字符呈现为空格,但不同的控制台可以将其呈现为空。但这并没有改变 NUL 字符并非什么都不是的事实。

如果您想删除一个字符,那么您要做的就是将以下所有字符向下移动。

关于c++ - 如何制作空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40515491/

相关文章:

c++ - 无法在 Visual Studio 中构建汇编语言程序

c++ - 对象、右值引用、常量引用之间的重载解析

c++ - 在 C++ 中,命名参数的范围是否包括其默认值的表达式?

c++ - __has_cpp_attribute 不是 'function-like' 宏?

c++ - 如何在 C++11 中捕获函数参数并存储函数指针以供以后执行?

c++ - wxStyledTextCtrl 如何设置关键字样式

c++ - 这被认为是有效的 c++11 或 c++14 吗?还是 gcc/clang 弄错了?

c++ - 如何获取当前执行的程序集路径

c++ - 在 C++ 中 -> 是什么意思?

c++ - 变量模板偏特化和 constexpr