新手小白求c++源码
c++老师布置了一份作业要求:
所有代码写在主函数里,打开任意类型的文件,统计每种字节(0~255)的出现次数,按字节值从小到大的顺序,输出出现次数大于0的字节值及对应的出现次数
自己写的代码总是出错 ,求大佬们帮忙,给一份源码吧 本帖最后由 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") ;
}
} jackz007 发表于 2019-11-13 15:06
谢谢
{:10_266:} 本帖最后由 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> bin554385863 发表于 2019-11-13 18:49
----------------------------------------------------------------------------------------
E:%users ...
谢谢{:10_266:}
页:
[1]