wc 统计程序
WC项目要求
这个项目要求写一个命令行程序,模仿已有的wc.exe的功能,并加以扩充,给出某程序设计源语言文件的字符数、单词数和行数。给实现一个统计程序,它能正确统计程序文件的字符数、单词数、行数,以及其他扩展功能,并能够快速的处理多个文件。
用户需求
程序员处理需求的模式为:wc.exe [paramter][file_name]
各个参数的意义:
基本功能列表:wc.exe -c file.c:char count;
wc.exe -w file.c:char count;
wc.exe -l file .c:line count;
扩展功能:-s 递归处理目录下符合条件的文件
-a 返回高级选项(代码行、空行、注释行)
空行:本行全部是空格或者格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“}”
代码行:本行包括多于一个字符的代码。
注释行:本行不是代码行,并且本行包括注释,例如:}//注释。这种情况下,这一行属于注释行。
[file_name]:文件的目录名,可以处理一般通配符。
文本文件,确定字/词/句
高级功能:-x参数 这个参数单独使用,如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等信息。
需求举例:wc.exe -s -a *.c 返回当前目录、子目录所有.c文件的代码行数,空行数,注释行数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include "stdio.h" #include "string.h" #include "stdlib.h" int charcalculate=0; int wordcalculate=0; int linecalculate=0; void calculate( char * file) { FILE * fp; char a; if ((fp= fopen (file, "r" ))==NULL) { printf ( "read file failed!\n" ); exit (-1); } while (! feof (fp)) { a= fgetc (fp); if (a!= ' ' &&a!= '\n' &&a!= '\t' &&a!= ',' &&a!= '.' &&a!= '!' &&a!= ';' &&a!= '=' ) charcalculate++; if (a== ' ' ||a== '\n' ||a== '\t' ||a== ',' ||a== '.' ||a== '!' ||a== '=' ||a== ';' ) wordcalculate++; if (a== '\n' ||a== '\t' ) linecalculate++; } linecalculate++; charcalculate--; fclose (fp); } int main( int argc, char * argv[]) { FILE *fp; calculate(argv[2]); while (1) { if ((fp= fopen (argv[2], "r" ))==NULL) { printf ( "FileNull\n\n\n" ); scanf ( "%s%s%s" ,argv[0],argv[1],argv[2]); continue ; } else if (! strcmp (argv[1], "-c" )) printf ( "File:%sCharNum:%d\n" ,argv[2],charcalculate); else if (! strcmp (argv[1], "-w" )) printf ( "File:%sWordNum:%d\n" ,argv[2],wordcalculate); else if (! strcmp (argv[1], "-l" )) printf ( "File:%sLineNum:%d\n" ,argv[2],linecalculate); else if (! strcmp (argv[1], "exit" )) { printf ( "Exit!\n" ); break ; } else printf ( "NullPoint\n" ); printf ( "\n\n" ); scanf ( "%s%s%s" ,argv[0],argv[1],argv[2]); } return 0; } |
这个程序我分了两部分,一部分是主函数,负责打开对应文件和执行对应的命令。另一部分是计数部分,根据所发命令输出对应的统计结果。
下面是我程序的执行结果。对应的TXT是随便在电脑里找的readme文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?