第三次作业

github地址:https://github.com/tei-kigen/WordCount

表格:

  预计用时(min) 实际用时(min)
需求分析 30  15
设计 30  (边编边设计)
第一部分编码 90  300
接口封装 60  20
新功能实现 90  100
单元测试 30  20
分析总结 10  10

初步实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        static int zm(char c)//用来判断是不是字母的方法
        {
            if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
                return 0;
            else
                return 1;
        }
        
        static void Main(string[] args)
        {
            string filename;
            int cts = 0;//用来记录字符数的变量
            int lns = 0;//用来记录行数的变量
            int wds = 0;//用来记录单词数的变量
            filename = Console.ReadLine();//读取输入的文件名
            FileStream sw = new FileStream(filename, FileMode.Open, FileAccess.Read);
            string[] filelist = File.ReadAllLines(filename, Encoding.Default);//打开文件
            string str ="";//定义字符串用来合并每行文本,用第一行作为初始值
            for (int i = 0; i <= filelist.Length - 1; i++)//遍历每一行统计字符数和单词数
            {
                if (filelist[i].Length != 0)//该判断语句用来筛除空行
                {
                    lns++;
                    str = str + ' ' + filelist[i];//将所有行合在一起
                }
            }
            string[] a = str.Split(new char[5] { ' ', ',', '.', '?', '!' });//将整条字符串分隔成小字符串,初步形成单词(未筛选)
            string word = "";//该字符串用来合并单词
            for (int i = 0; i <= a.Length - 1; i++)
            {
                cts = cts + a[i].Length;
                if (a[i].Length >= 4 && zm(a[i][0]) == 0 && zm(a[i][1]) == 0 && zm(a[i][2]) == 0 && zm(a[i][3]) == 0)//用这条语句判断是不是单词,单词需要至少4个字母开头
                {
                    wds++;
                    word = word + a[i].ToLower() + ' ';//tolower用来统一规范为小写
                }
            }
            Console.WriteLine("characters:" + cts);
            Console.WriteLine("words:{0}", wds);
            Console.WriteLine("lines:" + lns);
            string[] ip = word.Split(' ');//定义最终用来统计单词频率的字符串组
            Dictionary<string,int> list = new Dictionary<string, int>();//创建一个字典类list用来计数
            for (int i=0; i <= ip.Length - 1; i++)
            {
                if (list.ContainsKey(ip[i]))
                {
                    list[ip[i]]++;
                }
                else if(ip[i].Length!=0)
                    list[ip[i]] = 1;
            }
            foreach (KeyValuePair<string, int>kvp in list)
            {
                Console.WriteLine("<{0}>:{1}", kvp.Key, kvp.Value);
            }
            sw.Close();//关闭文件
        }
    }
}

代码的总体思路是先把所有有效行和为一个字符串,再从中筛选有效单词合为一个字符串,再从中显示每个单词出现的次数

 

最大的障碍是C#中的各种类各种方法了解得太少了,许多东西百度了也看不懂,看到不了解的类和方法会感到无从下手不知所云,在这方面的积累还有待提高。

测试:

心得体会:

虽然是结对编程作业不过没有人可以结对所以自己做了,不管是编码过程中的要求还是代码功能上的要求都有许多要求实现的部分没有实现。这次作业做得十分匆忙,将来有空的话希望能接着补完这次作业。

posted @ 2019-04-05 21:33  tei-kigen  阅读(110)  评论(0编辑  收藏  举报