c++如何读取文本文件中的汉字,通过wifstream和locale
1条回答
- RDS__ 2017-05-07 13:43关注
我之前写了一个MFC程序,用来统计文本文件中的每个不同汉字、26个字母的个数
并且排序出出现的最多的三个字符(汉字与字母一视同仁)下面的是其中的核心处理片段
希望能帮助到你void C文本统计Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 int len, flag; int sum[9999]; TCHAR ch[9999]; CString chtmp; CString str; for (int i = 0; i<9999; i++) sum[i] = 0; GetDlgItemText(IDC_EDIT1, str); len = str.GetLength(); flag = 0; if (len != 0) { //计数 for (int i = 0; i < len; i++) { TCHAR unitemp = str.GetAt(i); //TCHAR 可以保存双字节字符,如汉字 if (!(_istpunct(unitemp)||_istspace(unitemp)||(unitemp == '\n'))) //判断是否为标点、特殊字符、空格、换行 { int f = 1; for (int j = 0; j < flag; j++) if (unitemp == ch[j]) { sum[j]++; f = 0; } if (f == 1) { ch[flag] = unitemp; sum[flag] = 1; flag++; } } } //进行排序 for (int i = 1; i<flag; i++) for (int j = 0; j<i; j++) if (sum[j]<sum[i]) { int t = sum[i]; sum[i] = sum[j]; sum[j] = t; wchar_t c = ch[i]; ch[i] = ch[j]; ch[j] = c; } CString str_tmp; chtmp.Insert(0, ch[0]); str_tmp.Format(_T("%s 出现了 %d 次"), chtmp, sum[0]); SetDlgItemText(IDC_EDIT2, str_tmp); chtmp.Empty(); if (flag>1) { chtmp.Insert(0, ch[1]); str_tmp.Format(_T("%s 出现了 %d 次"), chtmp, sum[1]); SetDlgItemText(IDC_EDIT3, str_tmp); chtmp.Empty(); } else { str_tmp.Format(_T(" ")); SetDlgItemText(IDC_EDIT3, str_tmp); } if (flag > 2) { chtmp.Insert(0, ch[2]); str_tmp.Format(_T("%s 出现了 %d 次"), chtmp, sum[2]); SetDlgItemText(IDC_EDIT4, str_tmp); chtmp.Empty(); } else { str_tmp.Format(_T(" ")); SetDlgItemText(IDC_EDIT4, str_tmp); } } else { MessageBox(_T("请先输入文字或从文件导入。")); } }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器