wc.exe命令行程序——c语言实现

  1 /*
  2 *    没能实现的功能:wc.exe -s递归处理目录下符合条件的文件
  3 *                   wc.exe -x 显示图形界面
  4 *
  5 *
  6 *    实现的功能: wc.exe -c显示文件的字符数、
  7 *                wc.exe -l行数、
  8 *                wc.exe -w单词、
  9 *                wc.exe -a空行数、代码行数、注释行数的统计测试
 10 *`
 11 *
 12 */
 13
 14 #include"iostream"
 15 using namespace std;
 16 void CharCount(char path[]);  //字符统计函数
 17 void WordCount(char path[]);  //单词统计函数
 18 void LineCount(char path[]);  //行数统计函数
 19 void Muiltiple(char path[]);  //综合统计函数,包括代码行,空行,注释行
 20 int main()
 21 {
 22     char input[100],path[50];
 23     gets(input);
 24     int count=strlen(input);
 25     strncpy(path, input + 10,  count - 10);
 26     path[count - 9] = ‘\0‘;
 27     //cout << path << endl;
 28     int check = 1;
 29     while (check)
 30     {
 31         int i = 7;
 32         if ((input[i] == ‘-‘) && (input[i + 1] == ‘c‘))
 33         {
 34             CharCount(path);
 35             break;
 36         }
 37         if ((input[i] == ‘-‘) && (input[i + 1] == ‘w‘))
 38         {
 39             WordCount(path);
 40             break;
 41         }
 42         if ((input[i] == ‘-‘) && (input[i + 1] == ‘l‘))
 43         {
 44             LineCount(path);
 45             break;
 46         }
 47         if ((input[i] == ‘-‘) && (input[i + 1] == ‘a‘))
 48         {
 49             Muiltiple(path);
 50             break;
 51         }//获取文件名
 52     }
 53     system("pause");
 54     return 0;
 55 }
 56 void CharCount(char path[]) //字符统计函数
 57 {
 58     FILE *fp=NULL;
 59     int c = 0;
 60     char ch;
 61     cout << path<<endl;
 62     char *path3 = path;
 63     int k = strlen(path);
 64     *(path3 + k-1) = ‘\0‘;
 65     //cout << path3<<endl;
 66     if ((fp = fopen(path3 , "r")) == NULL)
 67     {
 68         printf("file read failure.");
 69         exit(0);
 70     }
 71     ch = fgetc(fp);
 72     while (ch != EOF)
 73     {
 74         c++;
 75         ch = fgetc(fp);
 76     }
 77     cout << "char count is :" << c << endl;
 78     c--;
 79     fclose(fp);
 80 }
 81
 82 void WordCount(char path[]) //单词统计函数
 83 {
 84     FILE *fp;
 85     int w = 0;
 86     char ch;
 87     char *path3 = path;
 88     int k = strlen(path);
 89     *(path3 + k - 1) = ‘\0‘;
 90     if ((fp = fopen(path3, "r")) == NULL)
 91     {
 92         printf("file read failure.");
 93         exit(0);
 94     }
 95     //fgetc()会返回读取到的字符,若返回EOF则表示到了文件尾,或出现了错误。
 96     ch = fgetc(fp);
 97     while (ch != EOF)
 98     {
 99         if ((ch >= ‘a‘&&ch <= ‘z‘) || (ch >= ‘A‘&&ch <= ‘Z‘) || (ch >= ‘0‘&&ch <= ‘9‘))
100         {
101             while ((ch >= ‘a‘&&ch <= ‘z‘) || (ch >= ‘A‘&&ch <= ‘Z‘) || (ch >= ‘0‘&&ch <= ‘9‘) || ch == ‘_‘)
102             {
103                 ch = fgetc(fp);
104             }
105             w++;
106             ch = fgetc(fp);
107         }
108         else
109         {
110             ch = fgetc(fp);
111         }
112     }
113     printf("word count is :%d.\n", w);
114     fclose(fp);
115
116 }
117
118 void LineCount(char path[]) //行数统计函数
119 {
120     FILE *fp;
121     int l = 1;
122     char ch;
123     char *path3 = path;
124     int k = strlen(path);
125     *(path3 + k - 1) = ‘\0‘;
126     if ((fp = fopen(path3, "r")) == NULL)
127     {
128         printf("file read failure.");
129         exit(0);
130     }
131     //fgetc()会返回读取到的字符,若返回EOF则表示到了文件尾,或出现了错误。
132     ch = fgetc(fp);
133     while (ch != EOF)
134     {
135         if (ch == ‘\n‘)
136         {
137             l++;
138             ch = fgetc(fp);
139         }
140         else
141         {
142             ch = fgetc(fp);
143         }
144     }
145     l--;
146     printf("line count is :%d.\n", l);
147     fclose(fp);
148 }
149
150 void Muiltiple(char path[])  //综合统计函数,包括代码行,空行,注释行
151 {
152     FILE *fp;
153     char ch;
154     char *path3 = path;
155     int k = strlen(path);
156     *(path3 + k - 1) = ‘\0‘;
157     int c = 0, e = 0, n = 0;
158     if ((fp = fopen(path3, "r")) == NULL)
159     {
160         printf("file read failure.");
161         exit(0);
162     }
163     //fgetc()会返回读取到的字符,若返回EOF则表示到了文件尾,或出现了错误。
164     ch = fgetc(fp);
165     while (ch != EOF)
166     {
167         if (ch == ‘{‘ || ch == ‘}‘)
168         {
169             e++;
170             ch = fgetc(fp);
171         }
172         else if (ch == ‘\n‘)
173         {
174             ch = fgetc(fp);
175             while (ch == ‘\n‘)
176             {
177                 e++;
178                 ch = fgetc(fp);
179             }
180         }
181         else if (ch == ‘/‘)
182         {
183             ch = fgetc(fp);
184             if (ch == ‘/‘)
185             while (ch != ‘\n‘)
186             {
187                 ch = fgetc(fp);
188             }
189             n++;
190             ch = fgetc(fp);
191         }
192         else
193         {
194             c++;
195             while (ch != ‘{‘&&ch != ‘}‘&&ch != ‘\n‘&&ch != ‘/‘&&ch != EOF)
196             {
197                 ch = fgetc(fp);
198             }
199         }
200
201     }
202     printf("code line count is :%d.\n", c);
203     printf("empt line count is :%d.\n", e);
204     printf("note line count is :%d.\n", n);
205     fclose(fp);
206 }
时间: 2024-10-08 20:04:36

wc.exe命令行程序——c语言实现的相关文章

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c 统计文件字符数支持 -w 统计文件单词数支持 -l 统计文件总行数 2.拓展功能 支持 -a 返回高级选项(代码行 空行 注释行)支持 -s 递归处理符合条件的文件 3.高级功能 支持 -x 程序以图形界面与用户交互 [filename] 是

【CMD】如何批量调用命令行程序

最近在研究守望先锋的解包,然后中途有一个步骤,将00C文件通过一个命令行程序转为obj格式. 但是我遇到一个问题,这个命令行程序一次只能转换一个文件,而00C文件足足有7400个以上,这就难倒我了. 固然这个命令行程序有着源码,但是对于比较弱鸡的我来说,没有什么办法. 后来在朋友的指点下,发现了解决办法,因此在此分享给大家. 在CMD中,有类似于其他语言的for的命令. 其用法是: for %变量 IN (文件通配符) DO (要做的事情) 对于我来用的话,就是这样的 for %i IN (*.

命令行程序增加 GUI 外壳

Conmajia ? 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 GUI 外壳的命令行程序 程序思路是这样的: 通过运行 cmd.exe 来操作命令行,现在要给它一个 GUI. Windows 的命令行 cmd.exe \(\rightarrow\) 新进程 Process \(\rightarrow\) WinForm \(\rightarrow\) GUI 这

详解NodeJS和命令行程序

源起 植根于Unix系统环境下的程序,很多都把贯彻Unix系统设计的哲学作为一种追求.Unix系统管道机制的发明者Douglas McIlroy把Unix哲学总结为三点: 专注做一件事,并做到极致.程序协同工作.面向通用接口,如文本数据流.随着Unix/Linux系统在服务器上影响力越发强大,以及各种跨平台解决方案的发展,这种哲学也被带到了各种平台上.若干年前,笔者第一次接触NodeJS和其包管理解决方案NPM时候,就感觉到其官方倡导的风格,和Unix系统哲学非常契合.近年来,随着NodeJS在

golang实现命令行程序的使用帮助

通过flag包我们可以很方便的实现命令行程序的参数标志,接下来我们来看看如何实现命令行程序的使用帮助,通常以参数标志-h或--help的形式来使用. 自动生成使用帮助 我们只需要声明其他参数标志,并执行解析,flag包会帮我们自动生成使用帮助. //main.go //输出2个数,输出较大的数 package main import ( "flag" "fmt" "math" ) func main() { firstFlag := flag.F

Java命令行程序构建工具-airline

以前对于开发Java命令行程序,我都是很头大的,命令行程序麻烦的是解析参数,以及一些帮助信息,今天在研究接口测试时偶然发现了一个工具可以让你快速构建命令行程序 github地址 airline 导入jar包 airline jar 在maven仓库里搜索适合你构建系统的语句 代码 我找了个解析har文件的项目,来讲解开发过程 定制自己的命令行 我的命令行以doctorq作为命令,参数为company,命令的完整格式应该为doctorq company XXXXX. @Command(name="

如何使用Docker实现PHP命令行程序的CI/CD?

本文标签: Docker PHP命令行程序的CI/CD Codeship 内容要点: - 使用Jet设置环境并在本地运行测试 - 配置CodeshipPro每次新代码提交时,自动运行测试 - 上一步的测试通过后,自动将更新部署到服务器 持续集成 应用程序和测试套件已经在本地运行,下一步要做的是建立一些持续集成系统.虽然可以设置服务器来执行此操作,但这个过程工作量略大,因此推荐一个像CodeshipPro的服务. 使用Jet进行本地测试 代码提交到Codeship测试前,建议先安装其本地版本的持续

Node.js 命令行程序开发教程

nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html 基于node构建命令行工具

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1