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

C++ QT实现文本文件行首#前添加*或相关修改的技术问询

Qt C++ 实现文本文件逐行处理

下面是三种符合你需求的实现方案,使用Qt的文件操作类完成,代码简洁易维护:

方案一:给#开头的行前添加*(输出*#house)

核心逻辑:读取每行后判断是否以#开头,若是则在头部拼接*,否则保持原行不变。

#include <QFile>
#include <QTextStream>
#include <QString>

int main() {
    // 原文件路径和输出文件路径(建议用新文件避免覆盖原数据)
    const QString inputFilePath = "input.txt";
    const QString outputFilePath = "output1.txt";

    QFile inputFile(inputFilePath);
    QFile outputFile(outputFilePath);

    // 打开输入文件为只读模式,输出文件为写入模式
    if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        return 1; // 文件打开失败,返回错误码
    }

    QTextStream in(&inputFile);
    QTextStream out(&outputFile);

    // 逐行读取处理
    while (!in.atEnd()) {
        QString line = in.readLine();
        if (line.startsWith('#')) {
            out << "*" << line << "\n"; // 头部加*后写入
        } else {
            out << line << "\n"; // 原行写入
        }
    }

    // 关闭文件
    inputFile.close();
    outputFile.close();

    return 0;
}

方案二:将#开头的行替换为house(输出house)

核心逻辑:判断行以#开头后,直接写入固定字符串*house。

#include <QFile>
#include <QTextStream>
#include <QString>

int main() {
    const QString inputFilePath = "input.txt";
    const QString outputFilePath = "output2.txt";

    QFile inputFile(inputFilePath);
    QFile outputFile(outputFilePath);

    if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        return 1;
    }

    QTextStream in(&inputFile);
    QTextStream out(&outputFile);

    while (!in.atEnd()) {
        QString line = in.readLine();
        if (line.startsWith('#')) {
            out << "*house\n"; // 直接写入固定内容
        } else {
            out << line << "\n";
        }
    }

    inputFile.close();
    outputFile.close();

    return 0;
}

方案三:将#开头的行直接替换为*(输出*)

核心逻辑:判断行以#开头后,写入单个*。

#include <QFile>
#include <QTextStream>
#include <QString>

int main() {
    const QString inputFilePath = "input.txt";
    const QString outputFilePath = "output3.txt";

    QFile inputFile(inputFilePath);
    QFile outputFile(outputFilePath);

    if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        return 1;
    }

    QTextStream in(&inputFile);
    QTextStream out(&outputFile);

    while (!in.atEnd()) {
        QString line = in.readLine();
        if (line.startsWith('#')) {
            out << "*\n"; // 写入单个*
        } else {
            out << line << "\n";
        }
    }

    inputFile.close();
    outputFile.close();

    return 0;
}

注意事项

  • 建议使用新文件存储处理结果,避免操作失误导致原文件数据丢失;若需要覆盖原文件,可在处理完成后替换文件(需确保处理逻辑正确)。
  • QTextStream会自动处理不同平台的换行符,无需手动适配Windows/Linux/macOS的换行差异。
  • 若文件较大,逐行读取的方式能保证内存占用较低,不会出现内存溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:54