【发布时间】:2017-09-08 03:00:23
【问题描述】:
我正在尝试编写一个程序,该程序将读取 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;
}
【问题讨论】:
-
replace不工作还是没有被调用? -
如果您在调试器中逐行执行代码,它会按照您的预期进行吗?
-
不知道我怎么知道它是否不工作。我以我知道的唯一方式使用它。我也只是尝试在括号内的 isspace 参数周围加上单引号,例如 (isspace('passCode.at(0)') 但它无法编译。
-
@RachelSugg 您可以通过将打印语句放在 if 块中并检查任何输出来测试它
-
考虑使用
std::replace()代替手动替换,例如:std::replace(passCode.begin(), passCode.end(), ' ', '_');或者使用std::relace_if()代替,例如:std::replace_if(passCode.begin(), passCode.end(), [](char c) { return (std::isspace(c) != 0); }, '_');