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

C++如何将txt文件中的数字拆分存入vector并写入新文件

实现方案

核心逻辑说明

要完成需求只需要三步:

  • 读取txt文件中的8位数字字符串
  • 遍历字符串每一位,通过字符 - '0'的方式将字符转成对应的int数值,存入vector
  • 将vector中的元素按要求格式化后写入目标文件

现有代码可优化点

  • 用std::string存储输入的文件名,避免char数组长度不够导致的溢出风险
  • 不需要手动调用文件流的close()方法,文件流对象离开作用域时会自动析构关闭文件,更安全
  • 多余的<sstream>头文件可以删除,本需求用不到字符串流操作
  • exit(0)调用多余,直接return就可以终止程序

完整实现代码

#include <iostream>
#include <fstream> 
#include <vector> 
#include <string> 
using namespace std;

int main()
{
    string fileName;
    cout << "Enter file name: ";
    cin >> fileName;
    
    ifstream inputFile(fileName);
    // 校验文件是否成功打开
    if (!inputFile.is_open()) {
        cout << "Error! This file does not exist." << endl;
        return 0;
    }

    string numStr;
    // 因为文件只有一行8位数字,直接读取即可,不需要循环
    getline(inputFile, numStr);
    
    vector<int> numVec;
    numVec.reserve(8); // 提前分配8个元素的空间,避免动态扩容开销
    for (char c : numStr) {
        // 只处理数字字符,过滤可能存在的换行、空格等多余字符
        if (c >= '0' && c <= '9') {
            numVec.push_back(c - '0');
        }
    }

    // 写入结果文件
    ofstream outputFile("Matrikelnummer_solution.txt");
    outputFile << "Matrikelnummer: " << numStr << '\n';
    // 写入vector内容,格式如v = ( 0, 1, 4, 8, 5, 0, 5, 2 )
    outputFile << "vector v = ( ";
    for (int i = 0; i < numVec.size(); ++i) {
        if (i != 0) {
            outputFile << ", ";
        }
        outputFile << numVec[i];
    }
    outputFile << " )" << '\n';

    return 0;
}

关键操作说明

  • 字符转数字:ASCII编码中数字字符'0'到'9'是连续排列的,任意数字字符减去'0'就能得到对应的int类型数值,是C/C++中字符转数字最高效的实现方式
  • 提前调用reserve(8):因为已知固定是8位数字,提前给vector分配空间可以避免动态扩容的性能损耗,属于最优实现的规范写法
  • 数字字符校验:增加了数字字符判断逻辑,兼容文件末尾带换行、空格等异常情况,鲁棒性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:06:01