C語言與Perl語言查找字符串效率對比

今天看到一篇對比  perl, C, C++, Java 效率的博文html


把C  和 Perl的代碼摘下來, 從1500萬行的文件中查找指定字符串,他的機器用C 2分多完成,C++ 4分多完成,perl是8分多完成。ide


C代碼以下:htm

#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;//一旦有一個不相同就退出而且標誌爲0
                    break;
                }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

 參考:string

http://www.yesky.com/409/1701409_2.shtmlit

相關文章
相關標籤/搜索