我做了个基类为CEditView的文本编辑器,现在新建了一个菜单项为字数统计,点击它是出来我新建的一个字数统计的对话框,里面有中文字数统计,英文字数统计,和总共字符数三个静态文本,我现在要用一个函数来实现字数统计,代码应该怎么写,怎么获得文本编辑器中字符串
三个静态变量为IDC_STATIC1 CString m_strEnglish 
             IDC_STATIC2 CString m_strChinese
             IDC_STATIC3 CString m_strTotal
那个对话框的名字为:IDD_CHAR_CNT
对话框为CCharDlg请问下怎么编写这段代码???

解决方案 »

  1.   

    简单来说,统计字符个数用strlen或者wstrlen就可以。
      

  2.   

    如果只是统计字符个数就一直从文本中读即可,用while(file.Read(...))
    如果需要汉字和其他的分开统计就需要:
    char ch=strtext.GetAt(i);
    if(IsDBCSLeadByte(ch)==1)//1表示汉字
    {
       .....
    }
      

  3.   

    那我如果只统计字数的话,(一个英文字符占一个字节,中文占两个字节)我只设置一个静态文本IDC_STATIC 
    那我void CEditorView::OnCharCount() 这个函数是那个菜单的响应函数,这段代码改如何编写。。主要是我如何获取我的文本编辑器里的输入字符啊(比如说,我输入了“今天天气很好”,然后我点击统计应该就出现总共字符数:6,这样子的效果)
    请大家帮帮忙啊
    谢谢啦
      

  4.   

    将字符串转换为UNICODE ,遍历字符串,逐一比较每个字符
    #include <iostream>
    #include <conio.h>
    #include <atlbase.h>using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    LPCWSTR pstr = L"晚上好124zersd!";
    int nA = 0;
    for (LPCWSTR p = pstr; *p ; p++)
    if ((USHORT)*p <= 255)
    nA++; int nT = lstrlenW(pstr);
    int nC = nT - nA;
    cout << CW2A(pstr) << endl;
    cout << "NC: " << nC << endl;
    cout << "NA: " << nA << endl;
    cout << "NT: " << nT << endl;
    getch();
    return 0;
    }
      

  5.   

    但是我所统计数据的字符串不是特定的,如上面所说的“晚上好,124zersd”,而是像word一样是自己输入的
    然后再通过菜单来查询字符数
      

  6.   

    你用GetWindowText() API把编辑框中的输入的字符串读出来,然后再统计不就行了。 上面的说得无非就是一个思路。
      

  7.   

    YES,我就是要这个函数
    谢谢