我佛慈悲 发表于 2019-11-13 14:14:58

新手小白求c++源码

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

jackz007 发表于 2019-11-13 15:06:00

本帖最后由 jackz007 于 2019-11-13 15:10 编辑

#include <stdio.h>

int main(void)
{
      unsigned int d , i , j , k , m                                              ;
      unsigned char c , fn                                                      ;
      FILE * fp                                                                        ;
      printf("输入文件名:")                                                         ;
      scanf("%s" , fn)                                                               ;
      for(k = 0 ; k < 255 ; k ++) d = 0                                             ;
      if ((fp = fopen((char *) fn , "rb")) != NULL) {
                c = fgetc(fp)                                                            ;
                while(! feof(fp)) {
                        d ++                                                          ;
                        c = fgetc(fp)                                                    ;
                }
                fclose(fp)                                                               ;
                for(k = 0 ; k < 255 ; k ++) {
                        if(d) {
                              c = k                                                    ;
                              if(k < 32 || k > 127) c = '.'                            ;
                              printf("0x%02x - [%c] : %4u\n" , k , c , d)         ;
                        }
                }
      } else {
                fprintf(stderr , "\n\n")                                                 ;
                fprintf(stderr , "\t文件 : [%s] 不存在!\n" , fn)                        ;
                fprintf(stderr , "\n\n")                                                 ;
      }
}

我佛慈悲 发表于 2019-11-13 15:48:13

jackz007 发表于 2019-11-13 15:06


谢谢
{:10_266:}

bin554385863 发表于 2019-11-13 18:49:12

本帖最后由 bin554385863 于 2019-11-14 12:55 编辑

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
int main(int argc, char const *argv[])
{
    std::string fn;
    std::cout << "请输入要打开的文件" << std::endl; //文件名
    std::getline(std::cin, fn);                     //输入文件名
    std::fstream fstm(fn, std::ios::in);            //创建文件流对象并打开指定的文件
    char cstr;                                 //创建字符数组保存读取的结果
    fstm.read(cstr, 255);                           //读取文件
    std::string str(cstr);                        //用字符串数组初始化string对象
    fstm.close();
    std::cout << "原文件内容\n"
            << str << std::endl;
    std::sort(str.begin(), str.end(), std::less<unsigned int>()); //按ASCII骂大小排序
    size_t count = 1;                                             //计数器
    char c = str;                                              //比较标记字符
    std::cout << "排序后\n"
            << str << std::endl;
    for (size_t i = 1; i <= str.size(); i++)
    {
      if (c == str)
      {
            count++; //如果连续相等计数器+1
      }
      else
      {
            c = str; //如果不等则赋值再次比较
            std::cout << str << "出现了" << count << "次" << std::endl;
            count = 1;
      }
    }

    return 0;
}


----------------------------------------------------------------------------------------
E:\Users\admin\Documents\VScode\Code\Test\text.txt
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>

我佛慈悲 发表于 2019-11-13 22:03:43

bin554385863 发表于 2019-11-13 18:49
----------------------------------------------------------------------------------------
E:%users ...

谢谢{:10_266:}
页: [1]
查看完整版本: 新手小白求c++源码