我正在为我的大学做一个项目,需要处理相当大的文件(>50MB),并且我使用flex基本上重写了一个由行组成的文件,例如
1 1:41 3:54 7:40 13:8
2 4:7 7:8 23:85转到
1 1 3 7 13
2 4 7 23(基本上,将number_a:number_b转换为number_a,并在执行时将输出打印到一个文件中)
我的问题是,既然我的程序的其余部分都是用C++编写的:这是一个很好的反射,因为flex应该是快的( flex中的f代表fast),还是我错了,在C++中有更简单、更有效的方法来做到这一点?
我是C++的新手,所以我有很多C编程经验,对所有可用的工具以及它们的性能知之甚少。
下面是我用flex编写的代码:
%{
#include<stdio.h>
unsigned int nb_doc = 1;//prend en compte le premier doc
unsigned int i;
%}
couple_entiers [0-9]+:[0-9]+
retour_chariot \n[0-9]+
autre .
%%
{couple_entiers} {i=0;
while(yytext[i] != ':'){
printf("%c",yytext[i]);
i++;
}
}
{retour_chariot} {nb_doc ++; printf("%s",yytext);}
{autre} {printf("%s",yytext);}
%%
int main (void){
yylex();
printf("\n\n%d",nb_doc);
return 0;
}发布于 2017-02-06 01:25:41
考虑将您的自定义代码替换为常规解决方案:
system("sed -E 's/:\d+ / /g'");:)
https://stackoverflow.com/questions/42054862
复制相似问题