WordCount:C语言实现
项目地址:https://github.com/m8705/WordCount
项目要求
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。
这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
基本功能列表:(已完成)
- wc.exe -c file.c //返回文件 file.c 的字符数
- wc.exe -w file.c //返回文件 file.c 的词的数目
- wc.exe -l file.c //返回文件 file.c 的行数
扩展功能:(未完成)
-s 递归处理目录下符合条件的文件。
-a 返回更复杂的数据(代码行 / 空行 / 注释行)
高级功能:(未完成)
-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
PSP
PSP2.1 | 预计耗时 | 实际耗时 |
---|---|---|
总体计划 | 2h | 1.5h |
预计完成 | 10h | 12h |
程序开发 | 8h | 8h |
需求分析 | 0.5h | 0.2h |
设计文档 | 0.5h | 0.3h |
设计复审 | 0.5h | 0.5h |
代码规范 | 0.5h | 0.5h |
具体设计 | 1h | 1h |
具体编码 | 6h | 6h |
代码复审 | 1h | 2h |
程序测试 | 2h | 2h |
程序报告 | 1h | 1h |
测试报告 | 1h | 1h |
计算工作量 | 0.5h | 0.5h |
事后总结 | 2.5h | 2.5h |
总计时间 | 12h | 13.5h |
解题思路
用C语言Main函数接收参数,对参数进行判断,分别采用不同的方式统计数量即可。
代码
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- int main(int argc, char *argv[])
- {
- /*
- printf("main函数收到了%d个参数\n",argc);//第一个参数默认是可执行文件本身,第二个参数开始是接受到的参数
- int i;
- for( i = 0; i < argc; i++ ){
- printf("%s ",argv[i]);
- }
- printf("\n");
- */
- if( argc == ){
- //打印接受到的参数
- /*
- int i;
- printf("收到的外部参数:");
- for( i = 1; i < argc; i++ ){
- printf("%s ",argv[i]);
- }
- printf("\n");
- */
- //尝试读取文件的内容
- char data;
- FILE *fp = fopen(argv[],"r");
- if(!fp){
- printf("错误:文件读取失败\n");
- return -;
- }
- //对参数进行判断
- if( !strcmp(argv[],"-c") ){//字符数
- char temp;
- int num = ;
- temp = fgetc(fp);
- while( temp != EOF ){
- //putchar(temp);
- temp = fgetc(fp);
- num++;
- }
- printf("该文本文件的字符数为:%d\n",num);
- }
- else if( !strcmp(argv[],"-w") ){//单词数
- int w = ;
- char a = fgetc(fp);
- while( a != EOF){
- if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') ){
- while( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='' && a <='') )
- a =fgetc(fp);
- w++;
- a =fgetc(fp);
- }
- else
- a =fgetc(fp);
- }
- printf("该文本文件的单词数为:%d\n",w);
- }
- else if( !strcmp(argv[],"-l") ){//行数
- char temp;
- int num = ;
- temp = fgetc(fp);
- while( temp != EOF ){
- //putchar(temp);
- if(temp == '\n'){//字符需要用单引号扩住
- num++;
- }
- temp = fgetc(fp);
- }
- printf("该文本文件的行数为:%d\n",num);
- }
- else{
- printf("错误:参数超出范围!\n");
- printf("允许参数:-c,-w,-l\n");
- }
- int n=fclose(fp);
- }
- else{
- printf("错误:运行参数必须要3个\n");
- printf("用法:wc.exe [parameter] [file_name]\n");
- }
- system("pause");
- return ;
- }
运行结果
小结
通过这个项目,我复习了C语言相关知识,同时增进了自己对软件开发流程的理解
WordCount:C语言实现的更多相关文章
- WordCount C语言实现求文本的字符数,单词数,行数
1.码云地址: https://gitee.com/miaomiaobobo/WordCount 2.psp表格 PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) P ...
- 个人项目(WordCount C语言)
WordCount程序(C语言) Github地址:https://github.com/peter-ye-code/WordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征统计程序 ...
- 软件工程-wordcount(C语言实现)
Github项目地址:https://github.com/xiaobaot/wordcount-wc/tree/master WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数 ...
- 结对编程项目——C语言实现WordCount Web化
结对编程项目 代码地址 201631062219,201631011410 gitee项目地址:https://gitee.com/xxlznb/pair_programming 作业地址:https ...
- wordcount(C语言)
写在前面 上传的作业代码与测试代码放在GitHub上了 https://github.com/IHHHH/gitforwork 本次作业用的是C语言来完成,因为个人能力与时间关系,只完成了基本功能,扩 ...
- Scala,Java,Python 3种语言编写Spark WordCount示例
首先,我先定义一个文件,hello.txt,里面的内容如下: hello sparkhello hadoophello flinkhello storm Scala方式 scala版本是2.11.8. ...
- Spark源码编译并在YARN上运行WordCount实例
在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...
- 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数
一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...
- 利用Scala语言开发Spark应用程序
Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...
随机推荐
- 奖券数目|2015年蓝桥杯B组题解析第一题-fishers
奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位 ...
- (转)MyBatis & MyBatis Plus
(二期)3.mybatis与mybatis plus [课程三]mybatis ...运用.xmind0.1MB [课程三]mybatis...机制.xmind0.2MB [课程三]mybatis与j ...
- git源码阅读
https://github.com/git-for-windows/git/issues/1854 https://github.com/git-for-windows/git/pull/1902/ ...
- VS中自动选择x86或x64的dll
http://www.cnblogs.com/lzjsky/archive/2010/09/06/1819321.html 原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win ...
- winform中splitter的用法
1.将winform分为三列 整个窗体分成可以自动调节的三列的做法:1.往窗体上丢两个panel控件其中:panelLeft——设置Dock属性为“left”,并调节好其宽度panelRight——设 ...
- 【附3】springboot源码解析 - 构建SpringApplication
package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.sp ...
- 论文笔记——SQUEEZENET ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
论文地址:https://arxiv.org/abs/1602.07360 模型地址:https://github.com/DeepScale/SqueezeNet 1. 论文思想 提出一种新的卷积组 ...
- 《EMCAScript6入门》读书笔记——24.编程风格
- Java 类引入 学习记录规整
之前觉得声明一个类,再把另一个包内的声明数值用第一个类打印出来就可以了(加入引入包类) 结果发现是不对的 看了看demo 得出正确结果 ImportTest 被运行 引入下面的Import类 ...
- Apache Kylin1.5.2.1之订单案例详细构建流程
转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建1. 创建事实表并插入数据 DROP TABLE IF EXISTS ...