一直一直一直开心 2023-06-29 15:23 采纳率: 80%
浏览 17
已结题

关于#数据统计#的问题,如何解决?

我有多个txt文本例如1.txt 如何用代码统计
我需要统计每个文本中数字出现的频数,并生成excel表格形式
文本形式如下:

img

需要统计每个数字出现的频数,如何用python写

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-29 18:39
    关注
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1090634
    • 这篇博客也不错, 你可以看下C语言:如何实现在txt文件中删除超链接、统计单词数量、生成单词列表 (文本流操作并解决乱码)
    • 除此之外, 这篇博客: 基于哈夫曼编码对txt文档实现压缩处理 | 算法分析之贪心算法设计 C语言版中的 一、实验内容与要求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 内容:哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。
      给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。哈夫曼提出构造最优前缀码的贪心算法,由此产生的编码方案称为哈夫曼编码。哈夫曼算法以自底向上的方式构造表示最优前缀码的二叉树T。此算法以|c|个叶结点开始,执行|c|-1次的“合并”运算后产生最终所要求的树T。
      要求:随机输入超过10字符及其频度,求出其这些字符的哈夫曼编码。 

    • 以下回答由chatgpt基于相关博客总结生成:

      根据参考资料中的代码和问题描述,可以看出需要实现一个按照指定列排序的功能。首先我们需要读取输入的学生纪录,然后根据指定列进行排序,最后输出排序后的结果。

      具体的解决方案如下:

      1. 首先,引入头文件iostream、string、vector、algorithm,提供所需的基本功能。代码中使用了命名空间std,所以不需要在代码中添加std::来指明使用的是标准库的函数。
      #include <iostream>
      #include <string>
      #include <vector>
      #include <algorithm>
      
      1. 定义一个结构体Student,用来存储学生的学号、姓名和成绩信息。
      struct Student
      {
          string id;
          string name;
          int grade;
      };
      
      1. 在主函数main中,首先读取输入的学生纪录个数n和指定排序的列号c。
      int n, c;
      cin >> n >> c;
      
      1. 创建一个vector容器students,用来存储学生的纪录。
      vector<Student> students(n);
      
      1. 通过循环,逐个读取学生的学号、姓名和成绩,并存入students中。
      for (auto& it : students)
          cin >> it.id >> it.name >> it.grade;
      
      1. 根据问题描述中的排序规则,使用sort函数对学生纪录进行排序。根据指定的列号c,分别编写不同的lambda表达式作为sort函数的第三个参数。在lambda表达式中,根据列号c来确定按照哪一列进行排序。

      2. 当c=1时,按学号递增排序。

      sort(students.begin(), students.end(),
          [](Student& a, Student& b) {
              return a.id < b.id;
          });
      
      • 当c=2时,按姓名的非递减字典序排序。在比较姓名时,先判断姓名是否相同,如果不同则按字典序排序,如果相同则按学号递增排序。
      sort(students.begin(), students.end(),
          [](Student& a, Student& b) {
              return a.name != b.name ? a.name < b.name : a.id < b.id;
          });
      
      • 当c=3时,按成绩的非递减排序。在比较成绩时,先判断成绩是否相同,如果不同则按非递减排序,如果相同则按学号递增排序。
      sort(students.begin(), students.end(),
          [](Student& a, Student& b) {
              return a.grade != b.grade ? a.grade < b.grade : a.id < b.id;
          });
      
      1. 最后,通过循环遍历students,输出排序后的学生纪录。
      for (auto& it : students)
          cout << it.id << " " << it.name << " " << it.grade << endl;
      

      以上就是按照问题要求的具体解决方案。通过以上代码,可以实现按照指定列排序的功能,并输出排序后的结果。请自行在本地编译运行代码,以获得更好的体验。如果有任何问题,请随时在提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 修改了问题 7月2日
  • 修改了问题 6月29日
  • 展开全部