You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++读取双文本文件匹配商品编码获取对应价格问题

解决Item Code匹配获取Price的问题

我来帮你捋捋这个问题哈!你现在的核心需求是把库存文件里的商品信息存起来,然后和采购文件里的编码匹配,取出对应的单价对吧?之前没成功大概率是几个小细节没处理好,我给你一步步拆解:

第一步:用结构体规范商品数据存储

首先得把库存里的每个商品信息用一个清晰的结构打包,避免数组里的字段混乱。咱们定义一个结构体:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <unordered_map> // 如果想用高效查找的话

using namespace std;

struct Item {
    string code;       // 商品编码
    double price;      // 单价
    int quantity;      // 库存数量
    string name;       // 商品名称
};

第二步:正确读取库存文件到数组(或容器)

别用while (!file.eof())这种写法!它经常会导致多读一次或者读取失败,直接用输入操作的结果判断循环结束才靠谱。这里用vector比固定长度数组更灵活:

vector<Item> inventoryItems;
ifstream inventoryFile("inventory.txt"); // 替换成你的库存文件名

if (!inventoryFile.is_open()) {
    cerr << "哎呀,打不开库存文件!检查下路径对不对~" << endl;
    return 1;
}

Item tempItem;
// 按文件里的顺序读取:编码→单价→数量→名称
while (inventoryFile >> tempItem.code >> tempItem.price >> tempItem.quantity >> tempItem.name) {
    inventoryItems.push_back(tempItem);
}
inventoryFile.close();

如果你的库存商品很多,想让匹配速度更快,可以用unordered_map直接存编码和价格的映射,这样查找的时候不用遍历整个数组:

unordered_map<string, double> itemPriceMap;
// 读库存时直接存入map
while (inventoryFile >> tempItem.code >> tempItem.price >> tempItem.quantity >> tempItem.name) {
    itemPriceMap[tempItem.code] = tempItem.price;
}

第三步:匹配采购文件的编码并获取价格

处理采购文件时,同样要避免eof()的坑,然后每次读到采购编码后,去库存容器里找匹配的项:

ifstream purchasesFile("purchases.txt"); // 替换成你的采购文件名
if (!purchasesFile.is_open()) {
    cerr << "打不开采购文件!检查路径~" << endl;
    return 1;
}

string purchaseItemCode;
int purchaseQty, purchaseNum = 1;

while (purchasesFile >> purchaseItemCode >> purchaseQty) {
    double targetPrice = -1; // 用-1标记未找到匹配项

    // 方法1:用vector遍历查找
    for (const auto& item : inventoryItems) {
        if (item.code == purchaseItemCode) {
            targetPrice = item.price;
            break;
        }
    }

    // 方法2:用unordered_map查找(更高效)
    // auto it = itemPriceMap.find(purchaseItemCode);
    // if (it != itemPriceMap.end()) {
    //     targetPrice = it->second;
    // }

    // 输出结果
    if (targetPrice != -1) {
        cout << purchaseNum << " " << purchaseItemCode << " " << purchaseQty 
             << " 单价:" << targetPrice << endl;
    } else {
        cout << purchaseNum << " " << purchaseItemCode << " 未找到对应商品哦!" << endl;
    }
    purchaseNum++;
}
purchasesFile.close();

几个要注意的小细节

  • 确保两个文件里的商品编码格式完全一致:比如大小写、有没有多余空格,不然会匹配失败
  • 读取文件时的字段顺序要和文件里的实际顺序对应,比如库存文件里要是先写名称再写编码,那读取顺序也要调整
  • 如果用map的话,记得包含<unordered_map>头文件

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

火山引擎 最新活动