要求:輸入乙個字串,統計每個單詞的個數。單詞間用空格隔開,可多個空格,寫出自己認為高效的演算法。首先想到的還是模擬的方法,就是用struct把出現過的單詞快取起來,然後再輸入文字中遍歷到新單詞的時候,遍歷一次struct,看這個單詞是不是已經存,做相關處理。例如:輸入:i love love china
輸出為:
i: 1
love:
2china:
1
如果輸入文字中有n個字母,不重複的字母為m個, 則演算法複雜度為o(nm^2) 最好情況是m =1 ,最差情況是m=n 其實現**如下:
1然後呢,做一下優化,恩路是遍歷使用者的輸入文字是必須的,但是,單詞的快取和出現次數的統計是可以使用hash演算法來優化的,借用hash演算法的特性,使複雜度立刻就降低到了 o(n),實現**如下:2#include
<
stdio.h
>
3#include
<
string
.h>
4struct
struct_words;
8int
main()
18puts(
"please input words.");
19gets(
string
);20
puts(
"**********===開始取詞***************=");
2122i =
0;23do
else
34i ++;
35}while
(c!='\0
');lda
3637
38puts(
"**********= 合併相同的單詞 **********====");
39for
(i =
0; words[i].word[0]
!='\0'
; i++)48
}49}50
51puts(
"*************** end **********====");
52for
(i =
0;words[i].word[0]
!='\0'
;i++)56
return(0
);57
}
#include呵呵,弄了近三個小時,發現linux下gdb不熟太痛苦了,加油!<
stdio.h
>
#include
<
string
.h>
#define
n 100
struct
struct_words;
inthash(
char
*key)
returnh&
n;}intmain()
puts(
"**********===輸入一些單詞,用空格隔開***************=");
gets(
string
);i =0
;doif(c !='
'&&c !='\0
')else
words[key].count
++;
ws =0;
}i ++;
}while
(c !='\0
');printf("%d
",k);
puts(
"***************列印結果 **********====");
for(i =0
; i
<
k ;i++)
puts(
"*************** end **********====");
return0;
}
統計字串中單詞的個數
一,問題描述 給定乙個字串,統計該字串中有多少個單詞。單詞以空格 回車 tab鍵 分隔。比如 i come from n china 有4個單詞。注意,字串不一定以字母開頭,也可以從空格開頭。二,實現思路 使用乙個 boolean iswhitespace用來標記當前字元所處的模式 比如,當前字元不...
java統計字串單詞的個數
在一些專案中可能需要對一段字串中的單詞進行統計,我在這裡寫了乙個簡單的demo,有需要的同學可以拿去看一下。本人沒怎麼寫個播客,如果有啥說的不對的地方,你來打我啊 不說廢話了直接貼 實現 統計各個單詞出現的次數 param text public static void findenglishnum...
Java 對字串中的每個單詞個數進行統計
這是來自一道電面的題。單詞統計很容易想到用map來統計,於是想到了用hashmap。但是我卻沒有想到用split來分割單詞,想著用遍歷字元的方式來判斷空格。人家面試官就說了,如果單詞之間不止乙個空格呢?其實遍歷的方法也是可以的,但是處理起來可能比較麻煩一點。也沒有什麼錯,畢竟我沒有用到輔助空間。既然...