实现项目WC

时间:2022-09-28 22:02:11

软件的需求分析

程序处理用户需求的模式为:

  • wc.exe [parameter][filename]

在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下:

1、基本功能

  • 支持 -c  统计文件字符数
  • 支持 -w 统计文件单词数
  • 支持 -l  统计文件总行数

2、拓展功能

  • 支持 -a 返回高级选项(代码行 空行 注释行)
  • 支持 -s 递归处理符合条件的文件

3、高级功能

  • 支持 -x 程序以图形界面与用户交互

[filename] 是待处理文件名。

从周五到今天一直在弄VS 2013,感觉有的那几个错误我都遇到了,算了算20多个小时了,郁闷的不行。不能单步调试、新建不了项目,卸载修复各种问题,太不容易了。

总算在作业结束之前把基本的功能写出来了,下面分解一下程序。

主程序主要是创建对象,把输入的字符串已空格为间隔拆分成几个字符串,并记录最后一个字符串为文件路径。最后按照输入命令一次返回不同值,执行不同功能。

            Wc c = new Wc();//创建对象
Console.Write("wc.exe");
string msg = Console.ReadLine();
string[] newm = msg.Split(new char[] { ' ' });//去掉空格 拆分成几个字符串
int n = newm.Length;
string str = newm[n - ];//记录文件路径
foreach (string i in newm)
{
if (i == "-c")
{
c.Read(str, );//字符数目功能
}
else if (i == "-w")
{
c.Read(str, );//单词数
}
else if (i == "-l")
{
c.Read(str, );//行数目
}

Read函数首先访问传过来的字符串路径,并打开。

        //byte[] byData = new byte[];//应该注释掉,一开始用的byte类型,后来发现有点问题
FileStream file = new FileStream(a, FileMode.Open);
StreamReader sr = new StreamReader(file);//访问文件并读取
//file.Read(byData, 0, 10000);
switch (b)
{

switch  结构 统计出各功能数目。

case :
{
/*while (byData[i] != '\0')
{
c++;
i++;
}*/
int Ichar = ;
while ((Ichar = sr.Read()) != -) // 不再有可用的字符,则为 -1
{
if (Ichar != ' ')
{
c++;
}
}
Console.WriteLine("字符数为:" + c);
file.Close();
} break;
case :
{
int Ichar = 0; //增加 char[] no = { ' ', '\n', '{', '}', '(', ')', '=', '+', '_', '*', '%' };
            while ((Ichar = sr.Read()) != -)
                    {
if (Ichar == ' ' || Ichar == '\n')//这我在想想更准确的判断方法 - -!
                        {                               //  for (int ss = 0; ss < 11; ss++)
w++; // {
} // if (Ichar ==no[ss]) 这个更加准确!
}
Console.WriteLine("单词数为:" + w);
file.Close();
} break;
case :
{
int Ichar = ;
while ((Ichar = sr.Read()) != -)
{
if (sr.ReadLine() != null)
{
l++;
}
}
Console.WriteLine("行数为:" + l);
file.Close();
} break;
}

下面贴上文本与结果。

实现项目WC

实现项目WC

增加-a 高级功能,首先在主函数添加代码,使程序能跳转到read函数。

 else if(i=="-a")
{
c.Read(str, );
}

在read函数中添加case 5,增加三个行数功能。

int Line_daima = ;
int Line_kong = ;
int Line_zhushi = ;//初始化三个行数变量
string stra;
while ((stra = sr.ReadLine())!=null)//读到末尾停止
{ if (stra=="")//百度了好多次,总算明白了readline函数对空行和末尾的区别
{
Line_kong++;
}
else if((stra.IndexOf('/'))>-)//判断字符串stra中是否存在’/‘字符
{
Line_zhushi++;
}
//int cc = s.IndexOf("//");
//string[] newn=str.Split(new char[]{'//'});
// if ( > -1)
// {
// Line_zhushi++;
// } //中间这段是错误案例,还没想好怎么能写出来。
else
Line_daima++;
}
Console.WriteLine("空行数为:"+Line_kong);
Console.WriteLine("注释行数为:"+Line_zhushi);
Console.WriteLine("代码行数为:"+Line_daima);
file.Close(); //这个很重要,一定要关闭访问过的文件。
}break;

实现项目WC的更多相关文章

  1. 个人项目-wc

    个人项目-WC   (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...

  2. 实践简单的项目WC

    #include<iostream> #include<fstream> #include<string> #include<Windows.h> us ...

  3. 个人项目——wc源程序特征统计

    这一次要做的项目是wc——统计程序文件特征的命令行程序. 根据需求需求得到的模式为:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需 ...

  4. 个人项目-WC&lpar;C&sol;C&plus;&plus; 兼容Linux和Windows&rpar;

    一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...

  5. 个人项目-WC &lpar;java实现&rpar;

    一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...

  6. 个人项目-WC(Java实现)

    一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...

  7. 个人项目 wc&lpar;java实现)

    一.Github网址: https://github.com/Clarazhangbw/Wc.exe 二.PSP表 PSP2.1 Personal Software Process Stages 预估 ...

  8. 个人项目WC&lpar;Python实现&rpar;

    一.GitHub地址 https://github.com/hoka-17/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际 ...

  9. 个人项目—WC

     一,Github地址:https://github.com/mushan520/WC.git 二.PSP表格: PSP2.1 Personal Software Process Stages 预估耗 ...

随机推荐

  1. java 对象输入输出流

    对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息.              ObjectInputStream   : 对象输入流            ...

  2. POJ 1062 &lpar; dijkstra &rpar;

    http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...

  3. JS效果的步骤

    一.写JS效果的步骤 1.先实现布局 (XHTML+CSS2) 2.实现原理 (1)希望把某个元素移除你的视线: a.  display:none;         显示为无,不占据空间 b.  vi ...

  4. docker简单介绍---网络端口管理

    一.查看docker支持的网络类型 docker network ls bridge:容器使用虚拟交换机的进行通信 host:使用宿主机的网络 none:只给容器分配一个lo的网卡,无法和外界进行通信 ...

  5. 在vue中使用highcharts的仪表图等扩展

    仪表图(”solidgauge“)在highcharts中属于扩展,单独引入highcharts使用仪表图会报错,需要在你的组件中做一谢其他的引入: // 最主要是这里模块的引入 很坑 import ...

  6. 在win上配置linux虚拟机图解

    首先,先下载安装vmware,cpu的类型不支持AMD. 一直点下一步完成安装.

  7. Redis详解(七)------ AOF 持久化

    上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严 ...

  8. MySQL数据库相关操作

    查看数据库 mysql> SHOW DATABASES; 选择数据库 mysql> USE 数据库名称: 查看当前数据库 mysql> select database(); -- 第 ...

  9. https&colon;&sol;&sol;www&period;cnblogs&period;com&sol;xubing-613&sol;p&sol;5895948&period;html

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  10. 数组相同的key组成新的数组

    function dataFunc (data){ var b = {}; $.each(data, function (i,v){ var g = v[key], //将评价人相同的拿出来组成一个新 ...