鱼C论坛

 找回密码
 立即注册
查看: 2640|回复: 4

新手小白求c++源码

[复制链接]
发表于 2019-11-13 14:14:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c++老师布置了一份作业
要求:
        所有代码写在主函数里,打开任意类型的文件,统计每种字节(0~255)的出现次数,按字节值从小到大的顺序,输出出现次数大于0的字节值及对应的出现次数
自己写的代码总是出错 ,求大佬们帮忙,给一份源码吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-13 15:06:00 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-13 15:10 编辑
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         unsigned int d[256] , i , j , k , m                                              ;
  5.         unsigned char c , fn[256]                                                        ;
  6.         FILE * fp                                                                        ;
  7.         printf("输入文件名:")                                                           ;
  8.         scanf("%s" , fn)                                                                 ;
  9.         for(k = 0 ; k < 255 ; k ++) d[k] = 0                                             ;
  10.         if ((fp = fopen((char *) fn , "rb")) != NULL) {
  11.                 c = fgetc(fp)                                                            ;
  12.                 while(! feof(fp)) {
  13.                         d[c] ++                                                          ;
  14.                         c = fgetc(fp)                                                    ;
  15.                 }
  16.                 fclose(fp)                                                               ;
  17.                 for(k = 0 ; k < 255 ; k ++) {
  18.                         if(d[k]) {
  19.                                 c = k                                                    ;
  20.                                 if(k < 32 || k > 127) c = '.'                            ;
  21.                                 printf("0x%02x - [%c] : %4u\n" , k , c , d[k])           ;
  22.                         }
  23.                 }
  24.         } else {
  25.                 fprintf(stderr , "\n\n")                                                 ;
  26.                 fprintf(stderr , "\t文件 : [%s] 不存在!\n" , fn)                        ;
  27.                 fprintf(stderr , "\n\n")                                                 ;
  28.         }
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-13 15:48:13 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-13 18:49:12 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-14 12:55 编辑
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <algorithm>
  5. int main(int argc, char const *argv[])
  6. {
  7.     std::string fn;
  8.     std::cout << "请输入要打开的文件" << std::endl; //文件名
  9.     std::getline(std::cin, fn);                     //输入文件名
  10.     std::fstream fstm(fn, std::ios::in);            //创建文件流对象并打开指定的文件
  11.     char cstr[255];                                 //创建字符数组保存读取的结果
  12.     fstm.read(cstr, 255);                           //读取文件
  13.     std::string str(cstr);                          //用字符串数组初始化string对象
  14.     fstm.close();
  15.     std::cout << "原文件内容\n"
  16.               << str << std::endl;
  17.     std::sort(str.begin(), str.end(), std::less<unsigned int>()); //按ASCII骂大小排序
  18.     size_t count = 1;                                             //计数器
  19.     char c = str[0];                                              //比较标记字符
  20.     std::cout << "排序后\n"
  21.               << str << std::endl;
  22.     for (size_t i = 1; i <= str.size(); i++)
  23.     {
  24.         if (c == str[i])
  25.         {
  26.             count++; //如果连续相等计数器+1
  27.         }
  28.         else
  29.         {
  30.             c = str[i]; //如果不等则赋值再次比较
  31.             std::cout << str[i - 1] << "出现了" << count << "次" << std::endl;
  32.             count = 1;
  33.         }
  34.     }

  35.     return 0;
  36. }

复制代码

----------------------------------------------------------------------------------------
E:\Users\admin\Documents\VScode\Code\Test\text.txt
  1. 11234567890123456789aaaaaaaaaabbbbbbbbbbnnnnnnnnnn##########!!!!!!!!!!
复制代码

--------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-opzwlso0.dil --stdout=Microsoft-MIEngine-Out-wqhfq3xt.4kl --stderr=Microsoft-MIEngine-Error-wqx2zvpo.gis --pid=Microsoft-MIEngine-Pid-ifywa5mc.ttl --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
请输入要打开的文件
E:\Users\admin\Documents\VScode\Code\Test\text.txt
原文件内容
11234567890123456789aaaaaaaaaabbbbbbbbbbnnnnnnnnnn##########!!!!!!!!!!
排序后
!!!!!!!!!!##########01112233445566778899aaaaaaaaaabbbbbbbbbbnnnnnnnnnn
!出现了10次
#出现了10次
0出现了1次
1出现了3次
2出现了2次
3出现了2次
4出现了2次
5出现了2次
6出现了2次
7出现了2次
8出现了2次
9出现了2次
a出现了10次
b出现了10次
n出现了10次


E:\Users\admin\Documents\VScode>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-13 22:03:43 | 显示全部楼层
bin554385863 发表于 2019-11-13 18:49
----------------------------------------------------------------------------------------
E:%users ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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