基于C++开发的一个作业上交查漏系统,这是我做课代表被老师催查作业有谁没交的时候突发奇想弄的,适用于坚果云等云端作业,各位需要改一改数据自取就行

#include<iostream>
#include<string>
#include<filesystem> //核心库文件,使用时要先将C++版本调至C17
#include<fstream> //用了getline来获取文件名字,cin读不到空格之类的符号
#include<regex> //用了正则表达式提取数字
#include<vector> //变长数组,用于存放数据
#include <algorithm> //借用了sort,reverse等功能
using namespace std;
namespace fs = filesystem;
using namespace fs;
//1.提取文件名,再用正则表达式提取数字,排序完存放到动态数组中
vector<int> TQ(vector<int> m)
{
    cin.sync();
    cout << "请输入文件地址:" << endl;
    path P;
    string T, T2;
    string pathStr;
    // 使用 cin.getline() 读取可能包含空格的文件路径
    std::getline(std::cin, pathStr); // 假设路径不会超过1024个字符
    P = pathStr; // 将 string 对象转换为 path 对象
    try {
        for (const auto& entry : fs::directory_iterator(P)) {
            T = entry.path().string();
            regex rx("\\d{13}");
            // 将原始字符串倒序
            string rev = T;
            reverse(rev.begin(), rev.end());
            smatch c;
            if (regex_search(rev, c, rx))
            {
                T2 = c.str();
                reverse(T2.begin(), T2.end());
                T2 = T2.substr(T2.size() - 2, T2.size());
                m.push_back(stoi(T2.c_str()));//字符串转数字并存放于数组中
            }
        }
    }
    catch (const fs::filesystem_error& e) {
        cerr << "文件异常: " << e.what() << endl;
    }
    catch (const exception& e) {
        cerr << "这里有一个意外发生: " << e.what() << endl;
    }
    return m;
}

//2.打开动态数组,找出缺少的项
void CZ(const vector<int>& v) {
    int sym;
    cout << "请输入预估的样本总量(不超过100): ";
    cin >> sym;
    vector<int> v2(sym, 1); // 初始化为1,表示所有数字都缺失
    vector<int> v3; // 存放丢失的数据

    for (int num : v) {
        if (num > 0 && num <= sym) {
            v2[num - 1] = 0; // 标记已找到的数字
        }
    }

    // 打印丢失的数据
    cout << "缺失的样本为:" << endl;
    for (int i = 0; i < sym; ++i) {
        if (v2[i] == 1) {
            cout << i + 1 << " ";
            v3.push_back(i + 1); // 将缺失的数字存储起来
        }
    }
    cout << endl;
    cout << "当前缺失的总量为: " << count(v2.begin(), v2.end(), 1) << endl;
    cout << endl;
}
int main()
{
    vector<int> m;
    cout << "*********欢迎使用文件查漏系统**********" << endl;
    cout << "***************************************" << endl;
        m = TQ(m);
        CZ(m);
    cout << "**********程序结束*********" << endl;
}

注意:filesystem头文件使用需要在项目设置C++17以上的协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值