c++如何读取字符串汉字

c++如何读取文本文件中的汉字,通过wifstream和locale

我之前写了一个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("请先输入文字或从文件导入。"));
    }

}