Go語言實(shí)現(xiàn)統(tǒng)計(jì)字符串中每個(gè)字符出現(xiàn)的次數(shù)
一、 案例目標(biāo)
本案例將實(shí)現(xiàn)一個(gè)程序,接收用戶輸入的一段文字,并統(tǒng)計(jì)其中每個(gè)字符(包括中文、英文、數(shù)字等)出現(xiàn)的次數(shù),并按字符輸出。
例如輸入:
Hello, 世界!
輸出:
H: 1
e: 1
l: 2
o: 1
,: 1
: 1
世: 1
界: 1
!: 1
二、 應(yīng)用場景舉例
- 文本分析、關(guān)鍵詞提取
- 字符頻率統(tǒng)計(jì)(用于密碼分析、數(shù)據(jù)挖掘)
- 字符畫處理(字符權(quán)重)
- AI、自然語言處理基礎(chǔ)任務(wù)之一
三、 涉及知識(shí)點(diǎn)講解
知識(shí)點(diǎn) | 說明 |
---|---|
map[rune]int | Go 中用于統(tǒng)計(jì)頻率的典型用法 |
rune | 支持 Unicode 字符(中文、表情、特殊符號(hào)) |
for _, r := range str | 正確遍歷字符串每個(gè)字符(而不是每個(gè)字節(jié)) |
四、實(shí)現(xiàn)需求
- 用戶輸入任意一段文字;
- 程序逐個(gè)字符統(tǒng)計(jì)出現(xiàn)次數(shù);
- 忽略字節(jié)編碼問題,支持中文;
- 輸出格式整齊,便于查看;
- 可拓展成圖表/詞云工具基礎(chǔ)。
五、 完整代碼實(shí)現(xiàn)
package main import ( "bufio" "fmt" "os" "sort" ) func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("請輸入一段文字:") input, _ := reader.ReadString('\n') counts := countCharacters(input) // 排序輸出 var keys []rune for k := range counts { keys = append(keys, k) } sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] }) fmt.Println("\n字符統(tǒng)計(jì)結(jié)果:") for _, r := range keys { fmt.Printf("%q: %d\n", r, counts[r]) } } // 統(tǒng)計(jì)字符出現(xiàn)次數(shù) func countCharacters(s string) map[rune]int { result := make(map[rune]int) for _, r := range []rune(s) { result[r]++ } return result }
六、運(yùn)行示例
示例1:
請輸入一段文字:hello, 世界
字符統(tǒng)計(jì)結(jié)果:
'\t': 1
',': 1
'e': 1
'h': 1
'l': 2
'o': 1
'世': 1
'界': 1
'\n': 1
'\n'
和 '\t'
說明:默認(rèn)輸入帶有換行符,可根據(jù)需要清洗。
七、 核心代碼解析
代碼段 | 說明 |
---|---|
map[rune]int | 創(chuàng)建一個(gè)以字符為鍵、出現(xiàn)次數(shù)為值的映射 |
[]rune(s) | 將字符串轉(zhuǎn)為字符切片,避免中文字符拆分錯(cuò)誤 |
sort.Slice | 將輸出結(jié)果按字符順序排序 |
八、 拓展練習(xí)建議
- 排除空格或標(biāo)點(diǎn),只統(tǒng)計(jì)字母與數(shù)字;
- 將結(jié)果寫入文件保存;
- 改為支持詞語統(tǒng)計(jì)(用
strings.Fields()
分詞); - 輸出詞頻圖或柱狀圖(結(jié)合
github.com/olekukonko/tablewriter
或 ASCII 圖表庫);
九、 常見錯(cuò)誤提示
- 遍歷字符串用
[]byte
:會(huì)導(dǎo)致中文字符被拆成多個(gè) byte; - 統(tǒng)計(jì)字符時(shí)忘記使用
rune
類型; - 輸出結(jié)果不排序,閱讀困難。
小結(jié)
通過這個(gè)案例,你學(xué)會(huì)了:
- 如何遍歷字符串中每一個(gè)字符(支持中文)
- 如何使用
map
來進(jìn)行頻率統(tǒng)計(jì) - 如何對統(tǒng)計(jì)結(jié)果進(jìn)行排序并美觀輸出
這是實(shí)際項(xiàng)目中非常有價(jià)值的一種“文本特征提取”技術(shù),是通往 NLP 和算法世界的一扇小門。
到此這篇關(guān)于Go語言實(shí)現(xiàn)統(tǒng)計(jì)字符串中每個(gè)字符出現(xiàn)的次數(shù)的文章就介紹到這了,更多相關(guān)Go統(tǒng)計(jì)字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口
這篇文章主要為大家詳細(xì)介紹了Go語言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,對大家的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以了解下2024-02-02Golang基礎(chǔ)常識(shí)性面試中常見的六大陷阱及應(yīng)對技巧總結(jié)
Go是一門簡單有趣的語言,但與其他語言類似,它會(huì)有一些技巧,這篇文章主要給大家介紹了關(guān)于Golang基礎(chǔ)常識(shí)性面試中常見的六大陷阱及應(yīng)對技巧的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08基于Golang實(shí)現(xiàn)YOLO目標(biāo)檢測算法
目標(biāo)檢測是計(jì)算機(jī)視覺領(lǐng)域的重要任務(wù),它不僅可以識(shí)別圖像中的物體,還可以標(biāo)記出物體的位置和邊界框,YOLO是一種先進(jìn)的目標(biāo)檢測算法,以其高精度和實(shí)時(shí)性而聞名,本文將介紹如何使用Golang實(shí)現(xiàn)YOLO目標(biāo)檢測算法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11golang實(shí)現(xiàn)微信小程序商城后臺(tái)系統(tǒng)(moshopserver)
這篇文章主要介紹了golang實(shí)現(xiàn)微信小程序商城后臺(tái)系統(tǒng)(moshopserver),本文通過截圖實(shí)例代碼的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Go語言如何實(shí)現(xiàn)將[][]byte轉(zhuǎn)為io.Reader
本文主要介紹了如何在Go語言中實(shí)現(xiàn)將[][]byte轉(zhuǎn)換為io.Reader,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2025-02-02