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

C++实现逐行反转短语单词,解决多行文本合并输出问题

解决C++逐行反转短语单词的问题

嘿,这个问题我之前也碰到过!核心问题就是你没按行维度处理文件内容,要么是读取时没保留行结构,要么是输出时没加换行,导致所有行的反转结果被挤到一行了。下面给你一个完整的解决方案,还有关键细节的解释:

核心思路

要实现每行独立反转,必须做到三点:

  • 逐行读取输入文件的内容,保留每行的边界
  • 对单个行内的单词单独进行反转操作
  • 处理完每行后,输出时加上换行符,确保结果行和原文件行一一对应

修改后的完整代码

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>

using namespace std;

// 专门处理单行的单词反转
string reverseWordsInLine(string line) {
    istringstream lineStream(line);
    vector<string> words;
    string singleWord;

    // 把当前行拆分成单个单词
    while (lineStream >> singleWord) {
        words.push_back(singleWord);
    }

    // 反转单词的顺序
    reverse(words.begin(), words.end());

    // 把反转后的单词重新拼成一行
    ostringstream resultStream;
    for (size_t i = 0; i < words.size(); ++i) {
        if (i != 0) {
            resultStream << " "; // 单词之间加空格
        }
        resultStream << words[i];
    }

    return resultStream.str();
}

int main() {
    ifstream inputFile("input.txt");
    ofstream outputFile("output.txt");

    // 检查文件是否成功打开
    if (!inputFile.is_open()) {
        cerr << "Error: 无法打开输入文件 input.txt" << endl;
        return 1;
    }
    if (!outputFile.is_open()) {
        cerr << "Error: 无法打开输出文件 output.txt" << endl;
        return 1;
    }

    string currentLine;
    // 逐行读取文件,直到文件结束
    while (getline(inputFile, currentLine)) {
        // 处理当前行的单词反转
        string reversedLine = reverseWordsInLine(currentLine);
        // 输出到文件和控制台(控制台输出可选)
        outputFile << reversedLine << endl;
        cout << reversedLine << endl;
    }

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

    return 0;
}

关键细节解释

  • 逐行读取:用getline(inputFile, currentLine)代替直接用>>读取,后者会把换行符当成空白符忽略,直接跨行读取单词,破坏原有的行结构
  • 单行独立处理:把每行的反转逻辑封装到reverseWordsInLine函数里,确保每行的单词反转互不干扰
  • 保留换行:输出时一定要加endl(或者'\n'),endl不仅会输出换行符,还会刷新缓冲区,保证内容及时写入文件
  • 空行处理:如果原文件有空行,getline会读取到空字符串,反转后依然是空字符串,输出endl会保留原文件的空行结构,符合预期

常见错误排查

如果你原来的代码是一次性读取整个文件到一个大字符串里再处理,那肯定会把所有行的单词混在一起反转,因为换行符会被istringstream当成空白符拆分单词,完全丢失行的边界——这就是你遇到合并输出的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:32:43