C++移除指定字符程序仅处理首个单词,如何修复?
修复移除句子中所有指定字符的C++程序
嘿,你的问题根源很好找:std::cin >> s只能读取到第一个空格(或换行、制表符)为止,所以程序实际上只处理了句子的第一个单词,自然看起来只有首个单词里的目标字符被移除了。
要解决这个问题,你需要用std::getline来读取整行输入(包含空格的完整句子),同时确保输入流的缓冲区状态正常。下面是修改后的完整代码:
#include <iostream> #include <string> #include <algorithm> int main() { std::string s; char c; std::cout << "Enter the string : "; // 用getline读取整行输入,包含空格 std::getline(std::cin, s); std::cout << "\nEnter the character : "; // cin >> c会自动跳过前导空白(包括换行),可以正常读取目标字符 std::cin >> c; /* Removing character c from s */ s.erase(std::remove(s.begin(), s.end(), c), s.end()); std::cout << "\nString after removing the character " << c << " : " << s << std::endl; return 0; }
关键改动说明:
- 把
std::cin >> s替换成std::getline(std::cin, s):这个函数会读取从当前位置到换行符的所有字符(换行符本身会被丢弃),这样就能拿到包含空格的完整句子了。 - 无需额外处理缓冲区换行:
std::cin >> c会自动跳过输入流中的前导空白字符(包括用户输入字符串后按下的换行符),所以可以正常读取目标字符。
测试一下:比如输入字符串"Hello world, let's remove all 'l' characters!",输入目标字符'l',程序会输出"Heo word, et's remove a '' characters!",所有的'l'都被正确移除了。
内容的提问来源于stack exchange,提问作者iepa
相关产品推荐
相关产品推荐

