컴 파일 러 DIY 의 - 영문 텍스트 의 단어 수, 문자 수, 줄 수 를 통계 합 니 다.
1758 단어 컴 파일 러 DIY
워드 에서 저 는 단어 통계 기능 을 자주 보 았 습 니 다. 그러면 어떻게 이 루어 졌 습 니까? 물론 첫 번 째 생각 은 전체 텍스트 를 옮 겨 다 니 며 줄 바 꿈 과 빈 칸 에 따라 문자열 을 분석 하 는 것 입 니 다. 그러면 이것 은 가능 합 니 다.그러나 간단하게 할 수 있 습 니까? 사실 텍스트 에 대해 단어 분석 을 하면 모두 가 어떻게 하 는 지 알 고 있 습 니 다. 어 려 운 부분 은 코드 의 실현 일 수 있 습 니 다. 그러면 지금 정규 표현 식 으로 이 루어 진다 면 모든 문 제 는 Over 입 니 다.
환경: ubuntu (물론 flex 의 windows 와 mac 를 설치 해도 됩 니 다)
원본 코드:
%{
unsigned long chars=0;
unsigned long words=0;
unsigned long lines=0;
%}
%%
[a-zA-Z]+ {words++;chars+=strlen(yytext);}
[a-z\-A-z]+ {words++;chars+=strlen(yytext);}
[0-9]+ {words++;chars+=strlen(yytext);}
[.|,|\b| |\t|\r] {chars++;}
[
] {lines++;chars++;}
%%
int main()
{
char filename[100];
printf(" 、 、 。
");
printf(" :");
scanf("%s",filename);
yyin=fopen(filename,"r");
printf(" ...
");
printf(" :");
yylex();
printf("
:%ld
", chars);
printf(" :%ld
", words);
printf(" :%ld
", lines);
return 1;
}
int yywrap()
{
return 1;
}
그러면 첫 번 째 정규 식 [a - zA - Z] + 대소 문자 로 구 성 된 단어 하나 이상 을 나타 낸다.
[a-z\-A-z]+ 특별한 중간 에 '-' 라 는 단 어 를 붙 이 는 거 예요.
[0-9]+ 디지털 집합
[.|,|\b| |\t|\r] 특수 기호 집합
위 코드 를 작성 한 후에 flex 로 직접 컴 파일 하면 c 파일 을 얻 을 수 있 습 니 다. 이 어 C 파일 을 컴 파일 하여 바 이 너 리 코드 를 만 들 고 실행 하면 됩 니 다.
테스트 텍스트:
my name is te-name %%%
테스트 결과:
영문 파일 의 문자, 단어, 줄 수 를 통계 합 니 다.계산 할 파일 이름 을 입력 하 십시오: test. txt 통계 시작... 정의 되 지 않 은 문자:%%% 문자 수: 20 단어 수: 4 줄 수 :2