isspace和replace()的问题

时间:2017-09-07 18:49:33

标签: c++ string

我正在尝试编写一个程序来读取2个字符的用户输入字符串," passCode"并替换任何空间" "用" __"。我只能编辑passCode初始化和cout之间的空间。目前,当用户输入" 1"时,它应打印出" 1 _",但它只打印出" 1"再次。两个if语句应该在字符串中分别查看每个字符,如果它是一个空格,则应该用下划线替换该空格。但是,它似乎没有起作用。我不知道是否因为我需要一个其他声明,但我不知道它需要什么。如果字符串中没有空格,那么就不需要做任何事情。

#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;
}

1 个答案:

答案 0 :(得分:5)

这是因为isspace没有返回bool,而是返回int

  

返回值

     

如果确实c是空白字符,则值不为零(即,为真)。否则为零(即假)。

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

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

Demo.