必赢体育app官方平台
你的位置:必赢体育app官方平台 > 新闻动态 > Go语言统计字符串中每个字符出现的次数 — 简易频率分析器
发布日期:2025-07-19 19:58 点击次数:190
一、案例目标
本案例将实现一个程序,接收用户输入的一段文字,并统计其中每个字符(包括中文、英文、数字等)出现的次数,并按字符输出。
例如输入:
Hello,世界!
输出:
H:1e:1l:2o:1,:1:1世:1界:1!:1
二、应用场景举例
•文本分析、关键词提取
•字符频率统计(用于密码分析、数据挖掘)
•字符画处理(字符权重)
•AI、自然语言处理基础任务之一
三、涉及知识点讲解
知识点
说明
map[rune]intGo中用于统计频率的典型用法
rune支持Unicode字符(中文、表情、特殊符号)
for_,r:=rangestr正确遍历字符串每个字符(而不是每个字节)
四、实现需求
1.用户输入任意一段文字;
2.程序逐个字符统计出现次数;
3.忽略字节编码问题,支持中文;
4.输出格式整齐,便于查看;
5.可拓展成图表/词云工具基础。
五、完整代码实现packagemainimport("bufio""fmt""os""sort")funcmain{reader:=bufio.NewReader(os.Stdin)fmt.Print("请输入一段文字:")input,_:=reader.ReadString(' ')counts:=countCharacters(input)//排序输出varkeys[]runefork:=rangecounts{keys=append(keys,k)}sort.Slice(keys,func(i,jint)bool{returnkeys[i]})fmt.Println(" 字符统计结果:")for_,r:=rangekeys{fmt.Printf("%q:%d ",r,counts[r])}}//统计字符出现次数funccountCharacters(sstring)map[rune]int{result:=make(map[rune]int)for_,r:=range[]rune(s){result[r]++}returnresult}
六、运行示例示例1:请输入一段文字:hello,世界字符统计结果:' ':1',':1'e':1'h':1'l':2'o':1'世':1'界':1' ':1
七、核心代码解析
代码段
说明
map[rune]int创建一个以字符为键、出现次数为值的映射
[]rune(s)将字符串转为字符切片,避免中文字符拆分错误
sort.Slice将输出结果按字符顺序排序
八、拓展练习建议
1.排除空格或标点,只统计字母与数字;
2.将结果写入文件保存;
3.改为支持词语统计(用strings.Fields分词);
4.输出词频图或柱状图(结合github.com/olekukonko/tablewriter或ASCII图表库);
九、常见错误提示
•❌遍历字符串用[]byte:会导致中文字符被拆成多个byte;
•❌统计字符时忘记使用rune类型;
•❌输出结果不排序,阅读困难。
小结
通过这个案例,你学会了:
•如何遍历字符串中每一个字符(支持中文)
•如何使用map来进行频率统计
•如何对统计结果进行排序并美观输出
这是实际项目中非常有价值的一种“文本特征提取”技术,是通往NLP和算法世界的一扇小门。
Powered by 必赢体育app官方平台 @2013-2022 RSS地图 HTML地图
Copyright Powered by365建站 © 2013-2024
