翻译器DIY它———算在英文文本中的单词数,字符和行数

简介:

咳咳。这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助。

在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经过整个文本换行和空格分析字符串,。但是能不能简单点了,事实上对文本做单词分析,大家都知道怎么做,难得地方可能就是代码的实现了。那么如今假设使用正則表達式来实现的话,那么一切问题就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++;}
[\n]                    {lines++;chars++;}
%%

int main()
{
   char filename[100];
   printf("统计一个英文文件里字符、单词、行数。\n");
   printf("请输入要计算的文件名称:");
   scanf("%s",filename);
   yyin=fopen(filename,"r");
   printf("開始进行统计...\n");
   printf("没有定义的字符:");
   yylex();
   printf("\n字符数:%ld\n", chars);
   printf("单词数:%ld\n", words);
   printf("行数  :%ld\n", 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




版权声明:本文博客原创文章。博客,未经同意,不得转载。




本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4643724.html,如需转载请自行联系原作者


相关文章
|
7月前
|
Linux
C 统计英文文本word(单词)个数
关于状态机的文章请自行百度,这里主要是在统计时用到了2个状态,IN是代表字符是属于word内,OUT代表当前字符不属于word内,那么什么时候word的个数需要增加1呢,即是status从OUT到IN时(说明当前指针马上就要走到word里了)
47 1
|
7月前
|
安全
如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理
该工具用于文本格式处理,能调整每行字数、进行内容断行、提取特定格式内容等。在示例中,展示了如何将一段“交通安全教育”文字按30字每行分隔,并整理出带序号的格式。工具支持序号断行和多级序号设置,适用于笔记整理、文档格式化和内容布局优化,能提升工作效率。下载工具可从百度网盘(提取码:qwu2)或蓝奏云(提取码:2r1z)获取。
|
Python
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
1094 0
|
算法
统计文本中单字母、双字母、三字母的频率
统计文本中单字母、双字母、三字母的频率
133 0
|
移动开发 数据库
使用notepad++将每行文本的开头结尾统一加上"",
使用notepad++将每行文本的开头结尾统一加上"",
430 0
|
前端开发 程序员
小细节:盒模型里面连续输入英文和数字不会自动换行,汉字会自动换行
小细节:盒模型里面连续输入英文和数字不会自动换行,汉字会自动换行
105 0
|
机器学习/深度学习 CDN
编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按
编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按
387 0
正则表达式去除空格、符号,只保留中文、英文、数字
正则表达式去除空格、符号,只保留中文、英文、数字
849 0
有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
312 0
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
(JAVA编程练习):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。