C++用string vector读写txt时无法过滤内容,如何提取指定数字写入?
问题分析
- 逻辑判断条件错误:原代码
if ((VecData[i] != "120") || (VecData[i] != "Hello") || (VecData[i] != "Hi"))使用了或运算,任意字符串都至少满足一个「不等于」的条件,会导致所有内容都被输出。 - 读入逻辑丢失换行信息:用
in >> data按空格拆分所有内容存入vector,无法区分原行边界,没法实现每输出一组三个数字就换行的要求。 - 筛选逻辑不符合需求:需求是仅保留Hi行后面的三个数字,其余内容全部跳过,原代码的筛选规则会把非指定字符串的所有内容都输出,不符合要求。
修正方案
推荐改为按行读取的方式,直接判断每行是否以Hi开头,符合条件就提取后面的三个数字写入新文件并自动换行,代码更简洁也更符合需求。
修正后代码
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; int main() { ifstream in("mytext.txt"); ofstream mynewfile1("mynewtext.txt"); string line; // 按行读取原文件 while (getline(in, line)) { istringstream iss(line); string firstWord; iss >> firstWord; // 仅处理以Hi开头的行 if (firstWord == "Hi") { int a, b, c; iss >> a >> b >> c; mynewfile1 << a << " " << b << " " << c << endl; } } in.close(); mynewfile1.close(); return 0; }
修改说明
- 用
getline按行读取,保留原文件的行边界,方便判断每一行的内容 - 每行先读取第一个单词,只有等于
Hi的行才处理,其余行直接跳过,完全符合筛选要求 - 读取Hi后面的三个数字直接写入新文件,自动加换行符,输出格式和预期完全一致
内容的提问来源于stack exchange,提问作者user12525021
相关产品推荐
相关产品推荐

