c++ - isspace 和 Replace() 的问题

标签 c++ string

我正在尝试编写一个程序,该程序将读取 2 个字符的用户输入字符串“passCode”,并将任何空格“”替换为“__”。我只能编辑 passCode 初始化和 cout 之间的空格。目前,当用户输入“1”时,它应该打印出“1_”,但它只是再次打印出“1”。两个 if 语句应该分别查看字符串中的每个字符,如果它是空格,则应该用下划线替换该空格。然而,它似乎不起作用。我无法判断这是否是因为我需要一个 else 语句,但我不知道它需要是什么。如果字符串中没有任何空格,则无需执行任何操作。

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
   string passCode;

   passCode = "1 ";

   if (isspace(passCode.at(0)) == true){
      passCode.replace(0, 1, "_");
   }
   if (isspace(passCode.at(1)) == true){
      passCode.replace(1, 1, "_");
   }

   cout << passCode << endl;
   return 0;
}

最佳答案

这是因为 isspace 不返回 bool,它返回一个 int:

Return Value

A value different from zero (i.e., true) if indeed c is a white-space character. Zero (i.e., false) otherwise.

如果删除 == true 部分,您的代码将按预期工作:

if (isspace(passCode.at(0))){
    passCode.replace(0, 1, "_");
}
if (isspace(passCode.at(1))){
    passCode.replace(1, 1, "_");
}

Demo.

关于c++ - isspace 和 Replace() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46103222/

相关文章:

c++ - 使用保留 vector 初始化 vector 的 vector

c++ - 编译 VNC 服务器二进制文件(适用于 Android)

java - 使用 JNI 从 native 方法返回 null

java - 从字符串 S 的每个位置提取整数

c# - 试图提取字符串中间的代码

c++ - GPGPU:一维线程索引的 CUDA 内核配置 - 线程、 block 、共享内存和寄存器

php - 检查 PHP 中的字符串是否全部大写

c - 在 C 中使用 strtok() 的段错误

c - sscanf - 从空字符串中读取

c++ - 什么是更好的做法? protected / setter/getter ?