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 ...
随机推荐
- icpc 2017北京 J题 Pangu and Stones 区间DP
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...
- 51NOD 1066 Bash游戏
1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的 ...
- 【jdk源码分析】java.lang.Appendable
1.概述 public interface Appendable 能够被添加 char 序列和值的对象.如果某个类的实例打算接收取自 Formatter 的格式化输出,那么该类必须实现 Appenda ...
- ovs-ofctl: s1 is not a bridge or a socket 解决方法
参考: ovs-vsctl: Error detected while setting up bridge ovs-ofctl: s1 is not a bridge or a socket 解决方法 ...
- hibernate报错 java.lang.StackOverflowError: null
在使用hibernate时,报错 java.lang.StackOverflowError: null 把当前线程的栈打满了 java.lang.StackOverflowError: null at ...
- STL_算法_05_集合算法
◆ 常用的集合算法: 1. 1.1.第6讲 PPT.40 ◆ set_union() : 构造一个有序序列,包含两个有序序列的并集. 1.2.第6讲 PPT.40 ◆ set_intersectio ...
- air for android 使用ANE来获取安卓手机IMEI号
一首页创建一个ANE文件 1 使用FlashBuilder 或者Eclipse 创建一个新的android项目 A 创建文件Extension.java package com.dabing. ...
- Python - Cookie绕过验证码登录
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 另一篇博文 P ...
- IdentityServer3零星笔记
Scope 是什么?有哪几种类型?每种类型都怎么使用? StandardScopes.All是什么概念? 解释:在Scope的Claims属性里包含的所有声明(类型是ScopeClaim,它的name ...
- 新的请求方式 fetch和axios
参考链接:https://www.javascriptcn.com/read-5840.html axios使用文档: https://www.kancloud.cn/yunye/axios/2348 ...