统计时出的问题

Anod221 2007-09-25 08:56:32
做哈夫曼编码的时候测试一下统计的代码,如下
代码:

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int main(int argc, char **argv)
{
if(argc < 2)return -1;
ifstream ifile(argv[1]);
if(!ifile) return -1;

unsigned int w[256];
memset(w, 0, 256*sizeof(int));
w[255] = 0;

while(!ifile.eof()){
unsigned char in = ifile.get();
w[in]++;
}

for(int i=0;i<256;i++) cout << i << " with counts:" << w[i] << endl;
return 0
}


结果在文本文件的统计时总是多了一个255的值,也就是最后一行至少是1(可执行文件的时候有可能大于1),这个255是这么来的
...全文
167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-09-26
  • 打赏
  • 举报
回复
feof 函数在读取出错【后】方可根据置位标志判断文件结束。

因此,
先读取后判断可以及时停止操作过程;
如果先判断,后读取,那么最后会有一次多余操作。
jixingzhong 2007-09-26
  • 打赏
  • 举报
回复
unsigned char in = ifile.get();
while(!ifile.eof()){
w[in]++;
in = ifile.get();
}

...

先读取,后判断
kingwkb 2007-09-26
  • 打赏
  • 举报
回复
学习了
Anod221 2007-09-26
  • 打赏
  • 举报
回复
原来如此,只怪我在STL学习不细,谢谢各位了
yiqisetian 2007-09-25
  • 打赏
  • 举报
回复
学习了,谢谢楼上
arong1234 2007-09-25
  • 打赏
  • 举报
回复
上楼还是跟楼主学把,这样做下标是统计中常用的

楼主的问题在于
in = ifile.get(); //如果到文件尾,不会立刻设置为eof,因此你总会多一次循环

正确的做法

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int main(int argc, char **argv)
{
if(argc < 2)return -1;
ifstream ifile(argv[1]);
if(!ifile) return -1;

unsigned int w[256];
memset(w, 0, 256*sizeof(int));
w[255] = 0;
unsigned char in = ifile.get();
while(!ifile.eof()){
w[in]++;
in = ifile.get();

}

for(int i=0;i<256;i++) cout << i << " with counts:" << w[i] << endl;
return 0
}
yiqisetian 2007-09-25
  • 打赏
  • 举报
回复
unsigned int w[256];

while(!ifile.eof()){
unsigned char in = ifile.get();
w[in]++;
}

for(int i=0;i<256;i++) cout << i << " with counts:" << w[i] << endl;

学习中,有谁能告诉我这是怎么用的,用char做int数组的下标,头一次见有这么用的,老师和我看过的不多的书上都没有啊,谁来告诉我!!!!
内容概要:本文研究了基于角蜥蜴优化算法(HLOA)优化BP神经网络的风电功率预测模型,并提供了完整的Matlab代码实现。该方法通过引入HLOA算法对BP神经网络的初始权值和阈值进行全局寻优,有效解决了传统BP神经网络收敛速度慢、易陷入局部最优的问题,显著提升了风电功率预测的精度与鲁棒性。文中系统阐述了HLOA算法的生物启发机制、数学模型及其寻优过程,详细构建了HLOA-BP预测模型的技术框架,并结合实际风电场历史数据开展仿真实验。结果表明,该模型在均方根误差(RMSE)、平均绝对误差(MAE)和决定系数(R²)等关键指标上均优于标准BP神经网络及其他主流智能优化算法(如PSO、GWO)优化的对比模型,验证了其在短期风电功率预测中的优越性能。; 适合人群:具备一定机器学习与智能优化算法基础,从事新能源发电预测、电力系统调度、智能算法应用或相关领域研究的科研人员及工程技术人员,尤其适合电气工程、自动化、计算机等相关专业的研究生及以上学历层次的学习者与开发者。; 使用场景及目标:①应用于风电场短期功率预测,提升电网调度的稳定性与经济性;②为智能优化算法与神经网络融合的技术方案提供实践参考;③作为科研论文复现、算法改进或毕业课题设计的高质量模板。; 阅读建议:建议读者结合所提供的Matlab代码,按照文中模型构建流程逐步调试与运行,重点关注HLOA算法的参数敏感性分析及其对网络训练过程的影响,同时可尝试将该方法迁移至光伏发电预测、负荷预测或其他时间序列预测场景中进行拓展验证与性能对比。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧