统计一个文件的单词的个数(2)

简介:  上一个程序的效率太低了,统计一个5M的文件就3S以上,改进后,1S左右,但是效率还是不行,用C写的比这个快多了,200ms。

 

上一个程序的效率太低了,统计一个5M的文件就3S以上,改进后,1S左右,

但是效率还是不行,用C写的比这个快多了,200ms。只是fgets()函数有点问题。

用intel的工具分析,是在getline()这个函数里花了大部分时间。悲剧的C++

 

#include <iostream> #include <fstream> #include <sstream> #include <string> #include <windows.h> #pragma comment(lib,"winmm.lib") //timeGetTime()函数用到的库 using namespace std; int main() { ifstream infile; DWORD start, end; string filename; cout << "请输入文件名:(注意要带扩展名的,如data1.txt) "; cin >> filename; infile.open(filename.c_str()); string line; size_t even_sum = 0; size_t odd_sum = 0; start = timeGetTime(); while (getline(infile,line)) { int i = 0; int j(0); int l = line.length(); while(line[i] == ' ' && i<l) ++i; while(i<l ) { int j = 0; while(line[i] != ' ' && i<l) { ++i; ++j; } if(j%2) ++even_sum; else ++odd_sum; while(line[i] == ' ' &&i<l) ++i; } } end = timeGetTime(); cout<<"time is:"<<end-start<<endl; infile.close(); cout<<"the sum of even number is:"<<even_sum<<endl<<"the sum of odd number is:"<<odd_sum<<endl; cout<<"the total sum is:"<<even_sum+odd_sum<<endl; // system("pause"); return 0; } //#include <stdio.h> //void main() //{ // int num=0,i=0;//num用于统计单词个数 // char str[100],c;//str[100]用存储输入的字符 // printf("请输入一个字符串:"); // gets(str);//获取输入的字符,存放在str[100]数组中 // do{ // while((c=str[i])==' ') // i++;//去掉第一个单词前的空格 // // if(c!='/0') // num++;//统计单词的个数 // // while((c=str[i])!=' '&&c!='/0') // i++;//去掉每个单词之间的空格 // }while(c!='/0');//判断是否为空格 // // printf("单诩的个数为:%d/n",num); // //} 

相关文章
|
3天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
275 99
|
3天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
4天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
224 132
|
4天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
193 110

热门文章

最新文章