C语言与Perl语言查找字符串效率对比

2017-01-10 19:23:27来源:作者:人点击

第七城市
今天看到一篇对比 perl, C, C++, Java 效率的博文

把C 和 Perl的代码摘下来, 从1500万行的文件中查找指定字符串,他的机器用C 2分多完成,C++ 4分多完成,perl是8分多完成。

C代码如下:
#include <stdio.h>#include <string.h>void main(){ int len=2048; char filename[20];//文件名 char buff[10000]; //文件内容缓冲区 char hit[5];// 查找的字符串 FILE *fd; int i,j,flag=0,over=0; int max,readed; int count=0;//最后的结果 strcpy(&filename[0] , "d://access.log_");  // 指定文件名 strcpy(&hit[0] , "HIT"); // 指定字符串 buff[0]=0x0; buff[1]=0x0; //打开文件: if((fd = fopen(&filename[0] , "rb"))==NULL){printf("Error : Can not open file %s/n",&filename[0]); } //读取文件内容 while(over != 1){readed = fread(&buff[2] , 1 , len , fd);if(readed < len){over=1;max=readed;}else{max=len;}for(i=0;i<max;i++){for(j=0;j<3;j++){ if(hit[j] != buff[i+j]){flag=0;//一旦有一个不相同就退出并且标志为0break; }else{flag=1;//一个相同为1,如果连续都相同最后结果定是1 }}if(flag==1){ count++; i+=j-1;}else{ if(j==0){i+=(j); }else{i+=(j-1); }}} //把最后两个字符转移到前面两个字节以防止切断搜索串.buff[0]=buff[max];buff[1]=buff[max+1]; } fclose(fd); printf("count:%d/n",count);}


perl代码如下:
#!/usr/bin/perl -w$filename="d://access.log_";$count = 0;open(FILE , "<$filename");while(<FILE>){@match_list = ($_ =~ /HIT/g);$count=$count+@match_list;}close(FILE);print "Count = $count/n";exit
参考: http://www.yesky.com/409/1701409_2.shtml
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台