CString 处理中文字符问题

时间:2021-10-15 07:39:57
有两个CString的变量a,b 里面存储的全都是中文字符
我怎么才能判断出a中的所有字符是不是在b中都出现了呢。
我直接用CString[i]或者GetAt好像得出的结果都是错的,中文字符是两个字节的 是不是不能这样引用?

11 个解决方案

#1


用 CStringW

#2


中文的还真没处理过,类型转换。每32bit值比较?

#3


    CStringW a = L"你好";
    CStringW b = L"处理中文字符问题好处理中文字符问题";

    for (int i = 0; i < a.GetLength(); ++i)
    {
        for (int j = 0; j < b.GetLength(); ++j)
        {
            if (a.GetAt(i) == b.GetAt(j))
            {
                //
            }
        }
    }

#4


一个中文字符占用两个字节,用宽字符比较.

#5


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#6


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#7


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#8


用宽字符比较
而且感觉cstring不太好用,呵呵
其实有个std::stringw

#9


引用 3 楼 Chiyer 的回复:
C/C++ code    CStringW a = L"你好";
    CStringW b = L"处理中文字符问题好处理中文字符问题";

    for (int i = 0; i < a.GetLength(); ++i)
    {
        for (int j = 0; j < b.GetLength(); ++j)
        {
            if (a.GetAt(i) == b.GetAt(j))
            {
                //
            }
        }
    }


这种的要包什么头文件》?

#10


引用 9 楼 sffofn 的回复:
引用 3 楼 Chiyer 的回复:
C/C++ code    CStringW a = L"你好"; 
    CStringW b = L"处理中文字符问题好处理中文字符问题"; 

    for (int i = 0; i < a.GetLength(); ++i) 
    { 
        for (int j = 0; j < b.GetLength(); ++j) 
        { 
            if (a.GetAt(i) == b.GetAt(j)) 
            { 
                // 
            } 
        } 
    } 
 

这种的要包什么头文件》?

StringW.h?

#11


引用 8 楼 cyblueboy83 的回复:
用宽字符比较 
而且感觉cstring不太好用,呵呵 
其实有个std::stringw 

wstring吧

#1


用 CStringW

#2


中文的还真没处理过,类型转换。每32bit值比较?

#3


    CStringW a = L"你好";
    CStringW b = L"处理中文字符问题好处理中文字符问题";

    for (int i = 0; i < a.GetLength(); ++i)
    {
        for (int j = 0; j < b.GetLength(); ++j)
        {
            if (a.GetAt(i) == b.GetAt(j))
            {
                //
            }
        }
    }

#4


一个中文字符占用两个字节,用宽字符比较.

#5


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#6


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#7


如果你的工程不是UINCODE 的那么就需要自已处理宽字符问题
两种方法,
1.自已处理 判断 字节ASCII是否 > 127 如果是则可以认为他是一个宽字符的第一字节,当然是否是一个合法的就看,字符集了,
2.用MultiByteToWideChar 将字串转成宽字串后再做处理,

#8


用宽字符比较
而且感觉cstring不太好用,呵呵
其实有个std::stringw

#9


引用 3 楼 Chiyer 的回复:
C/C++ code    CStringW a = L"你好";
    CStringW b = L"处理中文字符问题好处理中文字符问题";

    for (int i = 0; i < a.GetLength(); ++i)
    {
        for (int j = 0; j < b.GetLength(); ++j)
        {
            if (a.GetAt(i) == b.GetAt(j))
            {
                //
            }
        }
    }


这种的要包什么头文件》?

#10


引用 9 楼 sffofn 的回复:
引用 3 楼 Chiyer 的回复:
C/C++ code    CStringW a = L"你好"; 
    CStringW b = L"处理中文字符问题好处理中文字符问题"; 

    for (int i = 0; i < a.GetLength(); ++i) 
    { 
        for (int j = 0; j < b.GetLength(); ++j) 
        { 
            if (a.GetAt(i) == b.GetAt(j)) 
            { 
                // 
            } 
        } 
    } 
 

这种的要包什么头文件》?

StringW.h?

#11


引用 8 楼 cyblueboy83 的回复:
用宽字符比较 
而且感觉cstring不太好用,呵呵 
其实有个std::stringw 

wstring吧