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

如何重构C++文件整数排序状态检测代码使其可正常运行

原有代码核心问题
  • 变量名冲突:文件流对象与排序判断的bool变量重名,直接编译报错
  • 逻辑错位:调用std::is_sorted时传入了文件名字符串的迭代器,本质是判断文件名的字符是否有序,和文件内存储的整数完全无关
  • 循环条件错误:while (resultat.eof())表示只有文件读取结束才会进入循环,核心逻辑完全无法执行
  • 缺少存储容器:没有将文件读取的整数存入序列容器,无法判断整体整数序列是否有序
  • 语法与扩展性问题:函数声明返回int但无返回值,文件名硬编码为"A",且未做文件打开失败的异常处理
重构后代码

1. 头文件 SortingFunc1.h

#ifndef SORTING_FUNC1_H
#define SORTING_FUNC1_H
#include <string>

// 功能:判断指定文件内的整数是否按升序排列
// 参数:in_file_name 待检测的文件路径
// 返回值:-1 文件打开失败;0 整数未排序;1 整数已排序
int file_sort_checker(const std::string& in_file_name);

#endif

2. 函数实现文件 SortingFunc1.cpp

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include "SortingFunc1.h"

int file_sort_checker(const std::string& in_file_name) {
    std::ifstream in_file(in_file_name);
    // 处理文件打开失败的情况
    if (!in_file.is_open()) {
        std::cout << "文件打开失败,请检查路径是否正确" << std::endl;
        return -1;
    }

    std::vector<int> nums;
    int temp_num;
    // 读取文件中所有整数存入vector
    while (in_file >> temp_num) {
        nums.push_back(temp_num);
    }
    in_file.close();

    // 空文件或只有一个数默认视为已排序
    if (nums.size() <= 1) {
        std::cout << "Filen är sorterad!" << std::endl;
        return 1;
    }

    // 判断整数序列是否升序排列
    bool is_sorted_flag = std::is_sorted(nums.begin(), nums.end());
    if (is_sorted_flag) {
        std::cout << "Filen är sorterad! 总整数个数:" << nums.size() << std::endl;
        return 1;
    } else {
        std::cout << "Filen är inte sorterad! 总整数个数:" << nums.size() << std::endl;
        return 0;
    }
}

3. main.cpp 调用示例

#include <iostream>
#include "SortingFunc1.h"

int main() {
    std::string target_file = "A"; // 可替换为你需要检测的文件路径
    file_sort_checker(target_file);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:03