能否将getline()读取的输入赋值给独立字符串并保留原输入?
实现原输入字符串保留与空格去除的方法
要同时保留原输入字符串并得到去除空格后的新字符串,核心思路是用两个独立的字符串变量分别存储原输入和处理后的结果,具体实现如下:
方法一:基于原代码修正(保留替换逻辑)
- 定义两个
std::string变量:strOriginal存储原始输入,strProcessed用于处理空格去除。 - 用
getline读取输入到strOriginal,再将其赋值给strProcessed。 - 修正原循环的问题:原代码中使用
replace删除空格后,字符串长度缩短,直接递增i会导致漏检后续字符,需要在删除空格时不递增i。
修改后的完整代码:
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string strOriginal; string strProcessed; getline(cin, strOriginal); strProcessed = strOriginal; // 复制原输入到处理用字符串 for (int i = 0; i < strProcessed.size();) { // 手动控制i的递增 if (isspace(strProcessed.at(i))) { strProcessed.replace(i, 1, ""); // 删除后字符串长度减1,i不递增,继续检查当前位置的新字符 } else { ++i; // 非空格字符,正常递增 } } cout << "处理后字符串:" << strProcessed << endl; cout << "原输入字符串:" << strOriginal << endl; return 0; }
方法二:高效构建新字符串(更推荐)
直接遍历原字符串,将非空格字符逐个添加到新字符串中,这种方法避免了频繁的字符串替换操作,效率更高:
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string strOriginal; string strProcessed; getline(cin, strOriginal); // 遍历原字符串,筛选非空格字符 for (char c : strOriginal) { if (!isspace(c)) { strProcessed += c; } } cout << "处理后字符串:" << strProcessed << endl; cout << "原输入字符串:" << strOriginal << endl; return 0; }
效果验证
输入示例:Hello everyone
- 处理后输出:
Helloeveryone - 原字符串可正常访问,值为
Hello everyone
内容的提问来源于stack exchange,提问作者user22099685
相关产品推荐
相关产品推荐

