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

C++解密文本文件时如何保留单词间空格并输出到文件

解决C++解密文本时丢失空格的问题

问题原因

当前代码使用 read >> ch 读取字符,该运算符会自动跳过所有空白字符(空格、换行、制表符等),导致输入文本中的空格根本没有被读取,自然无法在输出中保留。

修复方案

1. 改为读取所有字符

将 while(read>>ch) 替换为 while(read.get(ch)),这样会读取文件中的每一个字符,包括空格在内的所有空白字符。

2. 优化字符映射逻辑

原代码的多个独立 switch 语句冗余且低效,建议使用字符映射表简化逻辑,比如用 std::unordered_map 或者数组(利用ASCII字符的连续性),让代码更易维护。

优化后的完整代码

#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;

int main() {
    char ch;
    ifstream read("input.txt");
    ofstream write("output.txt");

    // 构建解密映射表
    unordered_map<char, char> decryptMap = {
        {'A', 'H'}, {'S', 'E'}, {'B', 'L'}, {'U', 'O'},
        {'K', 'W'}, {'Q', 'O'}, {'M', 'R'}, {'C', 'L'}, {'F', 'D'}
    };

    while (read.get(ch)) { // 读取所有字符,包括空格
        // 匹配到映射规则则替换,否则保留原字符(如空格)
        auto it = decryptMap.find(ch);
        write << (it != decryptMap.end() ? it->second : ch);
    }

    read.close();
    write.close();
    return 0;
}

代码说明

  • read.get(ch) 会读取文件中的每一个字符,完全保留输入的格式结构。
  • 用 unordered_map 存储解密规则,后续修改映射关系只需调整表内容即可,无需新增或修改switch分支。
  • 对于不在映射表中的字符(空格、标点等)直接输出原字符,确保输出格式与输入完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:05:21