【问题标题】:Is there a way to refactore this code and make it work?有没有办法重构这段代码并让它工作?
【发布时间】:2022-01-09 10:09:14
【问题描述】:

我正在尝试创建一个函数并将其链接到头文件并将该函数调用到我的 main.cpp。 这是我将在 main.cpp 文件中调用的一个函数的代码。 我正在尝试创建一个排序函数来确定文件中的整数是否按顺序排序。

我将从中读取的文件既可以排序也可以不排序,并为用户输出结果,具体取决于文件的结果。 希望我解释清楚! :S

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

int file_sort_checker() {
  int nums;
  std::string in_file_name;
  std::ifstream resultat;
  resultat.open("A");
  resultat >> nums;

  while (resultat.eof()) {
    bool resultat = std::is_sorted(in_file_name.begin(), in_file_name.end());

    if (resultat)
      std::cout << "Filen är sorterad!" << nums << std::endl;
    else {
      std::cout << "Filen är inte sorterad!" << nums << std::endl;
    }
    resultat >> nums;
  }

  resultat.close();
}

【问题讨论】:

  • 您要重构代码的哪一部分?为什么要重构?
  • 此代码检查in_file_name 中的字符是否已排序。可悲的是in_file_name 是一个空字符串,它与文件内容无关。你应该阅读Why is iostream::eof inside a loop condition (i.e. while (!stream.eof())) considered wrong?
  • 你可以做的是:std::string message; if (resultat) message = "Filen är sorterad!"; else message = "Filen är inte sorterad!"; std::cout &lt;&lt; message &lt;&lt; nums &lt;&lt; std::endl;
  • 您需要决定是否要将所有数据读入容器中,例如std::vector,然后确定该数据是否已排序,或者您是否希望通过记住读取的最后一项并将其与当前项进行比较,以查看这两项是否已排序,然后重复该过程直到到达文件末尾或读取的值小于前一项。
  • 您的函数正在检查 filename 是否已排序,而不是文件。如果你想使用std::is_sorted,你需要一个ifstream 迭代器。

标签: c++ visual-c++


【解决方案1】:

这是一个检查文件中的数字是否排序的代码片段,升序

std::ifstream resultant("A");
int previous_number;
int number;
resultant >> previous_number;
bool is_sorted = true;
while (resultant >> number)
{
    if (number < previous_number)
    {
        std::cout << "File not sorted\n";
        is_sorted = false;
        break;
    }
    previous_number = number;
}

前一个数字是通过将第一个数字读入变量来初始化的。
然后循环将读取的下一个数字与前一个数字进行比较。如果下一个数字大于或等于前一个数字,则循环将继续。

【讨论】:

  • 我怎么能像你一样学习 Thomas!你能给我一些建议吗!
  • 我今年 22 岁,学习计算机工程,我在大学的第二门课程是关于 c++ 和文件处理的。我可以写简单的程序,但是当它太复杂时,我不知道如何像你在这里那样思考!
  • 这就是我所说的基本算法或蛮力算法。通过查看数字的排序容器(列表),我们知道如果 number[x} std::vector,然后比较向量中的元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多