统计一段英文文章中不同单词出现的次数,用F#写着玩玩,纯属娱乐!嘿嘿
使用二叉树,中序遍历输出;调用.NET 的File.ReadAllText读取文件
module
node
//二叉树 ,Node为节点,Empty为空节点
type
Tree = Empty
|
Node
of
Tree *
string
*
int
* Tree
//中序遍历
//中序遍历
let
rec
printTree t=
match t with
| Empty -> printfn " "
| Node(l,data,num,r) as n ->
printTree l
printfn " %s ---次数是----- %d " data num
printTree r
match t with
| Empty -> printfn " "
| Node(l,data,num,r) as n ->
printTree l
printfn " %s ---次数是----- %d " data num
printTree r
//递归插入节点,节点为空则插入新节点,若比节点数据data大,则插入其右子节点,若比他小,则插入其左节点
//若等于,则将节点的num加一,表明这个单词又出现一次
let
rec
insert1 =
function
| x ,n, Empty -> Node(Empty,x, 1 ,Empty)
| x ,n, Node(l ,data,num,r) ->
if x <data then Node(insert(x, 1 ,l),data,num,r)
elif x > data then Node( l ,data,num,insert(x, 1 ,r))
else Node(l,data,num+ 1 ,r)
| x ,n, Empty -> Node(Empty,x, 1 ,Empty)
| x ,n, Node(l ,data,num,r) ->
if x <data then Node(insert(x, 1 ,l),data,num,r)
elif x > data then Node( l ,data,num,insert(x, 1 ,r))
else Node(l,data,num+ 1 ,r)
open
System
open System.IO
[<EntryPoint >]
let main (args : string []) =
let reader =File.ReadAllText( " D:\\s.txt " )
//以空格分割文件中的内容,得到单词string数组
open System.IO
[<EntryPoint >]
let main (args : string []) =
let reader =File.ReadAllText( " D:\\s.txt " )
//以空格分割文件中的内容,得到单词string数组
let
strings = reader.Split(
'
'
)
//定义可变的root
//定义可变的root
let
mutable
root = node.Empty
//遍历所有单词,构造二叉树
//遍历所有单词,构造二叉树
for
s
in
strings
do
root <- node.insert1 (s, 1 ,root)
//中序遍历,输出统计内容
root <- node.insert1 (s, 1 ,root)
//中序遍历,输出统计内容
node.printTree root
0
0