翻译器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
版权声明:本文博客原创文章。博客,未经同意,不得转载。
翻译器DIY它———算在英文文本中的单词数,字符和行数的更多相关文章
- c语言统计一个文件中的单词,字符和行数
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- JS实现文本中查找并替换字符
JS实现文本中查找并替换字符 效果图: 代码如下,复制即可使用: <!DOCTYPE html><html> <head> <style type=" ...
- python统计英文文本中的回文单词数
1. 要求: 给定一篇纯英文的文本,统计其中回文单词的比列,并输出其中的回文单词,文本数据如下: This is Everyday Grammar. I am Madam Lucija And I a ...
- 使用SQL除掉文本中特殊的ascll字符比如Enter,Tab,空格键
一.在SQL查询的字段中如果包含tab.enter.空格键,可以使用ascii码进行替换: --替换了文本中含有tab键,Enter键,空格键的ascii码 select REPLACE(REPLAC ...
- SQL Server中关于基数估计如何计算预估行数的一些探讨
关于SQL Server 2014中的基数估计,官方文档Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimat ...
- 在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码隐藏
项目需要在线展示和编辑Json文件,所以需要找一个代码编辑器,因为我们的项目直接使用的 vueAdmin-template 这个模板 json编辑器也是直接从 vue-element-admin 项目 ...
- CodeIgniter2.0中sqlserver驱动返回受影响行数问题解决
最近使用CI写项目时遇到的问题,当使用sqlserve链接操作时 修改和删除返回的受影响行数不对 解决办法如下: 找到ci框架目录中include\database\drivers\sqlsrv\sq ...
- python3 计算文件夹中所有py文件里面代码行数,注释行数,空行数
import os,re #代码所在位置 FILE_PATH = './' def analyze_code(codefilesource): ''' 打开一个py文件统计其中的代码行数,包括空格和注 ...
- DataGridView中的rows.Count比实际行数多1的原因以及解决办法
场景 DataGridView怎样实现添加.删除.上移.下移一行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10281414 ...
随机推荐
- ODAC配置
1.安装Oracle11g服务端 2.安装ODAC ODTwithODAC121012 3.拷贝Oracle11g服务端: F:\app\adccTest\pro ...
- AutoFac使用方法总结:Part III
生命周期 AutoFac中的生命周期概念非常重要,AutoFac也提供了强大的生命周期管理的能力. AutoFac定义了三种生命周期: Per Dependency Single Instance P ...
- 如何处理 Windows Phone 8 动态砖变成黑白砖
原文:如何处理 Windows Phone 8 动态砖变成黑白砖 ? 问题的来龙去脉 我的 Windows Phone 8 动态砖变成黑白砖,所有图示和文字变成黑白,该如何处理? ? 问题的发生原因 ...
- Eclipse工具的问题
1 Eclipse采用ctrl抄 粘贴很卡 Eclipse -- Windows->Preferences->General->Editors->Text Editors-&g ...
- DV工作流
- HDU--3081--Marriage Match II--最大匹配,匈牙利算法
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- zTree市县实现三个梯级数据库映射
zTree市县实现三个梯级数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"? &g ...
- TCP连接建立过程中为什么需要“三次握手”(转)
传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.是专门为了在不可靠的互联网络 ...
- Idea开发环境
Idea开发环境中搭建Maven 1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path ...
- mysql 删除重复数据sql声明
CREATE TABLE tmp AS SELECT id FROM get_review_url WHERE (no,title,name,content) IN (SELECT no,title, ...