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

using System.Collections;
namespace ConsoleApplication1
{
class v
{

public int n { get; set; }
public string s { get; set; }
public v(int nu, string st)
{
this.n = nu;
this.s = st;
}

}
class Program
{
static void Main(string[] args)
{
if (args.Length ==1)
{
Dictionary<string, v> ht = new Dictionary<string, v>();

if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[0];

if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{

string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = "(\\b[a-zA-Z]{3}[A-Za-z0-9]+)|(\\b[a-zA-Z]{3})|((_[a-zA-Z]{3}[A-Za-z0-9]+)|(_[a-zA-Z]{3}))";
string article = File.ReadAllText(file[i]);
foreach (Match m in Regex.Matches(article, s))
{
string c = m.ToString();
if (c.Contains("_"))
{
c = c.Replace("_", "");
}
string n = c.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (c.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = c;
}
else
w.n += 1;
}
else
{
v w = new v(1, c);
ht.Add(n, w);
}
}
}

}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path + "\\黄敬博.txt", false);
foreach (var skey in re)
{

v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);

}
sw.Flush();

}
if (args[0].Equals("-e2"))
{
int j = 1;
Dictionary<string, v> ht = new Dictionary<string, v>();
if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[1];
if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{

string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = @"\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*";
string article = File.ReadAllText(file[i]);
Regex reg = new Regex(s);
Match m = reg.Match(article, 0);
while (m.Success)
{

String word = m.ToString();
string n = word.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (word.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = word;
}
else
w.n += 1;
}
else
{
v w = new v(1, word);
ht.Add(n, w);
}
m = reg.Match(article, m.Index + m.ToString().IndexOf(' '));
}

}

}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path + "\\黄敬博.txt", false);
foreach (var skey in re)
{

v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);
sw.Flush();
j++;
if (j > 10)
break;
}
}
if (args[0].Equals("-e3") )
{
int j = 1;
Dictionary<string, v> ht = new Dictionary<string, v>();
if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[1];
if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{

string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = @"\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*";
string article = File.ReadAllText(file[i]);
Regex reg = new Regex(s);
Match m = reg.Match(article, 0);
while (m.Success)
{

String word = m.ToString();
string n = word.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (word.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = word;
}
else
w.n += 1;
}
else
{
v w = new v(1, word);
ht.Add(n, w);
}
m = reg.Match(article, m.Index + m.ToString().IndexOf(' '));
}

}

}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path+"\\黄敬博.txt", false);

foreach (var skey in re)
{

v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);
sw.Flush();
j++;
if (j > 10)
break;
}
}
}
}
}

代码总共由3部分组成,每部分对应相对的mode。

mode2、3是基于mode1基础上做出的一点点改变。

这个程序主要利用了Dictionary功能。key设为string,使用时将单词的小写形式作为key。value设为一个小结构,包含一个string类型的单词和一个int类型的次数。

mode1遍历的过程为按照单个单词遍历的,mode2为两个,mode3为三个。

但mode2读取完两个单词需要往回退一个,mode3读取完要往回退两个。

若读取的单词的小写形式在dictionary中已经包含了。则value中的int值+1,然后比较value中的string与当前的单词,选择ASC码靠前的那个保存。

最后按照要求输出。

Individual Project - Word frequency program by HJB的更多相关文章

  1. Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering

    11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...

  2. Individual Project - Word frequency program - Multi Thread And Optimization

    作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...

  3. Individual Project - Word frequency program——12061154Joy

    Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...

  4. SoftwareEngineering Individual Project - Word frequency program

    说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...

  5. Individual Project - Word frequency program

    1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...

  6. Record for Individual Project ( Word frequency program )

    1.  预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2.  实际用时 ● 对 ...

  7. THE First Individual Project - Word frequency program

    第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...

  8. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  9. Project: Individual Project - Word frequency program----11061192zmx

    Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...

随机推荐

  1. 修改TEMPDB所在的路径

    USE master go ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'Path\tempdb.mdf') go AL ...

  2. Eclipse 插件安装报错问题(已解决)

    错误信息提示: An error occurred while installing the items session context was:(profile=epp.package.jee, p ...

  3. PyQt5--StatusBar

    # -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...

  4. RxJS--Subject

    Subject是Observable(可观察对象)的子类,subject是多播的,允许将值多播给多个observer(观察者),普通observable是单播. 每一个Subject都是一个Obser ...

  5. 2.Linux环境下配置Solr4.10.3

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.准备阶段 操作系统:CentOS 6.8 安装包:/home/test solr-4.10.3.tgz.t ...

  6. JavaScript中数组slice和splice的对比小结

    前言 今天重温了一下Javascript,看到了数组的方法,其中有两个比较相似的方法——splice和splice,看着很像,就是多了一个p,但是用法却相当不一样. 在使用中,可以通过选择一个具有强语 ...

  7. Android Studio快捷键——编辑篇

    Android Studio是官方推出的Android开发IDE,本系列讲解Android Studio中常用的快捷键,本文是该系列的第一篇,讲解的内容是与编辑代码相关的快捷键. 本文所讲快捷键基于A ...

  8. linux添加磁盘空间

    首先你要关掉系统,把分配的硬盘空间变大,或者重新建立一个虚拟硬盘(这时下面的就不是sda了,而是sdb1了).这两种方法都可行,我都试过了.其次用root用户登录到你的linux系统,查看你系统的分区 ...

  9. java中Integer与int装箱拆箱一点收获

    示例代码: class BoxIntInteger { public static void main(String[] args) { Integer a = new Integer(10111); ...

  10. shiro实战系列(六)之Authorization(授权)

    授权,又称作为访问控制,是对资源的访问管理的过程.换句话说,控制谁有权限在应用程序中做什么. 授权检查的例子是:该用户是否被允许访问这个网页,编辑此数据,查看此按钮,或打印到这台打印机?这些都是 决定 ...