做一个C#程序;列出文本中的每个单词和每个单词出现的次数。以及每个单词在句子中出现的次数。

例如 文本内容:aaa bbb aaa ccc ddd,eee,edc.
输出
aaa=2;
bbb=1;
ccc=1;
ddd=1;
eee=1;
edc=1;
希望有大虾帮忙。其他的我已经做出来了,就这步的算法想不出来

正则分隔  然后计算匹配次数:

static void Main(string[] args)
        {
            var s = "aaa bbb aaa ccc ddd,eee,edc";
            foreach (string m in (new Regex(@"\b\W+\b")).Split(s).ToArray().Distinct().OrderBy(i=>i))
            {
                Console.WriteLine("{0}: {1}", m, (new Regex(@"\b" + m + @"\b")).Matches(s).Count);
            }
            Console.Read();
        }

 

追问

我的文本放在richTextBox1.Text里,输出·在richTextBox2.Text里,

但是输出只有一个元素,你看看是什么地方错了

追答

richTextBox2.Text+=.....

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-07
建立一个Dictrory<string,int>,存放单词与单词的次数。

然后每次进行插入,“单词",1,若插入失败,则证明已经存在,将进行值加1即可。本回答被网友采纳
第2个回答  2013-05-31
Hashtable hashtable = new Hashtable<string,int>();
char[] charSeparators = new char[] {" ", ",", ".", "!", "?"};此处枚举所有单词分隔符
//这里是将句子分割成单词,并去掉空白元素。
string[] words = "aaa bbb aaa ccc ddd,eee,edc.".Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);

for (int i = 0; i < words.Length; i++)
{
//hashtable很强大,如果已经出现过这个单词,自然是可以取出来的,如果没有,他会自动做一个新元素出来。第一次加入hashtable的单词,Convert方法的参数会是null,但他可以转成0,不必担心。
hashtable[words[i]] = Convert.ToInt32(hashtable[words[i]]) + 1;
}
循环后将hashtable里的内容输出出来就行了。
相似回答