You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:24:01