找回密码
 register

QQ登录

只需一步,快速开始

查看: 547|回复: 0

[游戏教程] [C++]提取珍兽文件中的珍兽ID和变异次数

[复制链接]

[游戏教程] [C++]提取珍兽文件中的珍兽ID和变异次数

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
Waylee

主题

0

回帖

1万

积分

仙帝

积分
12364
Waylee 2023-5-7 15:47 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
循环读取文件第一列数据是一个五位数,判断这个五位数的前四个数字是否相同,相同的为一组数据,并统计数量,统计完成后这一组相同数据中最大的五位数进行输出,重复数量也进行输出。读取目录:G:\Users\Administrator\Desktop\C

(这里我要求,一次没重复的珍兽ID也要输出,输出显示为1变)
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    // 打开文件
    ifstream input("G:\\Users\\Administrator\\Desktop\\C\\input.txt");
    if (!input.is_open()) {
        cerr << "Failed to open file." << endl;
        return 1;
    }

    // 定义map容器,key为前四个数字相同的五位数,value为pair,其中first表示重复数量,second为最大的五位数
    map<string, pair<int, string>> data_map;

    // 循环读取文件,按行处理
    string line;
    while (getline(input, line)) {
        // 利用tab分割符分割每行数据
        size_t pos = line.find('\t');
        if (pos == string::npos) {
            cerr << "Invalid input format." << endl;
            return 1;
        }
        string col1 = line.substr(0, pos);  // 第一列数据
        string col2 = line.substr(pos + 1);  // 第二列数据

        // 判断第一列数据是否合法
        if (col1.length() != 5) {
            cerr << "Invalid input format." << endl;
            return 1;
        }
        for (char c : col1) {
            if (!isdigit(c)) {
                cerr << "Invalid input format." << endl;
                return 1;
            }
        }

        // 判断前四个数字是否相同,相同则为同一组数据
        string key = col1.substr(0, 4);
        auto iter = data_map.find(key);
        if (iter != data_map.end()) {
            // 如果已存在该组数据,则更新pair的值
            iter->second.first++;  // 重复数量加1
            iter->second.second = max(iter->second.second, col1);  // 更新最大的五位数
        } else {
            // 如果不存在该组数据,则添加该组数据
            data_map.emplace(key, make_pair(1, col1));  // 重复数量为1,最大的五位数为当前读入的五位数
        }
    }

    // 关闭文件
    input.close();

    // 打开输出文件
    ofstream output("G:\\Users\\Administrator\\Desktop\\C\\output.txt");
    if (!output.is_open()) {
        cerr << "Failed to open output file." << endl;
        return 1;
    }

    // 遍历map容器,输出结果
    for (auto& pair : data_map) {
        if (pair.second.first >= 3) {  // 如果重复数量大于等于3,则减少2
            pair.second.first -= 2;
        }
        // 输出结果到文件,格式为:前四个数字相同的五位数\t重复数量\t最大的五位数
        output << pair.first << '\t' << pair.second.first << '\t' << pair.second.second << endl;
    }

    // 关闭输出文件
    output.close();

    return 0;
}


QQ截图20230507154747.jpg
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-19 23:25 , Processed in 0.099538 second(s), 7 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表