第二次作业重交
一.Gitee代码链接:https://gitee.com/c0514/codes/new
二.解题思路:
1)首先考虑如何统计文件单词数,可以将一个非分隔符(如‘,’,‘ ’)作为一个新单词计数的开始,分隔符作为该单词的结束,行数的统计可以根据‘\n'的数量来统计。
3)考虑如何利用C#相关函数读取文件内容,以及如何写入文件内容。
3.代码片段:
分离命令参数和文件名:
string[] strs = { "one", "two", "three" }; string s = ""; for (int i = 0; i < strs.Length - 1; i++) { s = s + strs[i] + "|"; s = s + strs[strs.Length - 1]; Console.WriteLine(s); Console.ReadKey(); } string message = ""; // 存储用户命令 while (message != "exit") { Console.Write("wc.exe "); message = Console.ReadLine(); // 得到输入命令 string[] arrMessSplit = message.Split(' '); // 分割命令 int iMessLength = arrMessSplit.Length; string[] sParameter = new string[iMessLength - 1]; // 获取命令参数数组 for (int i = 0; i < iMessLength - 1; i++) { sParameter[i] = arrMessSplit[i]; } // 获取文件名 string sFilename = arrMessSplit[iMessLength - 1]; }
在Operator()方法中,捕捉 "-c"、"-w"、"-l" 命令,通过参数素组的设置调用不同的类方法进行处理;Display()方法用来打印输出信息; BaseCount() 方法用以统计指定文件的字符数、单词数以及总行数。
我们首先填充 Operator() 方法,此方法在参数数组中包含 "-c" 或 "-w" 或 "-l" 时调用 BaseCount() 方法实现文件基本信息的统计,调用 Display() 方法打印结果。代码如下:
public void Operator(string[] sParameter, string sFilename) { this.sParameter = sParameter; this.sFilename = sFilename; foreach (string s in sParameter) { // 基本功能 else if (s == "-c" || s == "-w" || s == "-l") { break; } else { Console.WriteLine("参数 {0} 不存在", s); break; } } }
在 BaseCount() 中,通过传入的文件名对文件进行读取。并进行字符数、单词数、总行数的判断。判断规则如下
- 对文件进行逐字符的读取,每读取一个字符,则字符数加1
- 在读取到 '\n' 字符时,判定文件总行数加1
- 在读取到单词分割符时,判定文件单词数加1。单词分割符可以是空格,制表符和各类标点符号
private void BaseCount(string filename) { try { // 打开文件 FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader sr = new StreamReader(file); int nChar; int charcount = 0; int wordcount = 0; int linecount = 0; //定义一个字符数组 char[] symbol = { ' ', '\t', ',', '.', '?', '!', ':', ';', '\'', '\"', '\n', '{', '}', '(', ')', '+' ,'-', '*', '='}; while ((nChar = sr.Read()) != -1) { charcount++; // 统计字符数 foreach (char c in symbol) { if (nChar == (int)c) { wordcount++; // 统计单词数 } } if (nChar == '\n') { linecount++; // 统计行数 } } iCharcount = charcount; iWordcount = wordcount + 1; iLinecount = linecount + 1; sr.Close(); } catch (IOException ex) { Console.WriteLine(ex.Message); return; } }
接下来,我们只需要将统计信息打印出来,就完成了基本功能的实现。
private void Display() { foreach (string s in sParameter) { if (s == "-c") { Console.WriteLine("字 符 数:{0}", iCharcount); } else if (s == "-w") { Console.WriteLine("单 词 数:{0}", iWordcount); } else if (s == "-l") { Console.WriteLine("总 行 数:{0}", iLinecount); } } Console.WriteLine(); }
至此,我们基本实现了 Test.exe 的基本功能。
- 三.总结:这次作业使我收获良多,刚开始拿到题目确实有点儿懵,甚至不知道该用什么语言写。后来经过查找资料,参考别人的博客,完成了这次测试。其中我遇到的问题就是代码写出来bug比较多,改了很久。希望在以后的作业里有所进步。
posted on 2018-09-30 16:46 chenchenchensr 阅读(164) 评论(0) 编辑 收藏 举报