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

C++按行读写文件筛选含指定子串行 while循环遇换行不终止问题问询

问题原因分析
  • 第一个问题:C++中使用>>流运算符读取字符串时,会默认跳过所有空白分隔符(包括空格、换行符\n、制表符\t等),因此你永远无法通过file >> word2读取到换行符,word2 != enterKey的终止条件永远不会触发,导致循环不会在换行位置停止。
  • 第二个问题:你的代码是按单个单词读取文本,而非按行读取,同时你判断的是单个单词完全匹配关键词,而非判断整行包含给定子串,自然无法从行起始位置开始处理整行内容。
修正后实现代码
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(){
    ifstream inputFile;
    ofstream outputFile;
    string inputFileName = "inputFile.txt";
    string keyWord = "morning";
    string currentLine;

    // 打开已存在的输入文件
    inputFile.open(inputFileName);
    if (!inputFile.is_open()) {
        cout << "输入文件打开失败" << endl;
        return 1;
    }

    // 创建输出文件
    outputFile.open("outputFile.txt");
    if (!outputFile.is_open()) {
        cout << "输出文件打开失败" << endl;
        inputFile.close();
        return 1;
    }

    // 按行读取输入文件,自动在换行位置终止单次读取
    while (getline(inputFile, currentLine)) {
        // 判断当前行是否包含目标子串
        if (currentLine.find(keyWord) != string::npos) {
            // 将整行写入输出文件,保留原始换行格式
            outputFile << currentLine << endl;
        }
    }

    // 释放文件资源
    inputFile.close();
    outputFile.close();
    return 0;
}
实现说明
  • 采用getline()函数按行读取输入文件,完全符合需求中「文件读取需按行执行」的要求,不需要手动判断换行符,函数读取到行尾(遇到换行符)时会自动终止本次读取
  • 使用string类的find()方法判断行中是否包含目标子串,只要子串存在就将整行写入输出文件,匹配逻辑符合需求
  • 新增了文件打开失败的异常判断,避免文件不存在时程序无响应的问题

内容的提问来源于stack exchange,提问作者Robert Kovalauskis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:12:00