C++ 中文字符串比较问题

lanling2008 2012-11-13 11:37:01
使用的是std:string

发现无法比较中文字符。
wstring first =str2wstr(it->first);
wstring str =str2wstr(name);
int ret=first.compare(str);//还是无法比较!


wstring str2wstr(string str)
{
size_t len = str.size();
wchar_t * b = (wchar_t *)malloc((len+1)*sizeof(wchar_t));
MBCS2Unicode(b,str.c_str());
wstring r(b);
free(b);
return r;
}

处理中文字符比较该如何操作?
...全文
1262 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanling2008 2012-11-14
  • 打赏
  • 举报
回复
项目工程都是使用VC2010 ,UNICODE字符集环境。 但是运行不同项目表现不一样
转角天边 2012-11-13
  • 打赏
  • 举报
回复
看下Unicode编程,我记得有个wcscmp函数
hongwenjun 2012-11-13
  • 打赏
  • 举报
回复
宽字节 Uniocode 和 单字节 GBK (或者 utf-8) 是不一样的 只有转换成同一种内码可以比较
lanling2008 2012-11-13
  • 打赏
  • 举报
回复
下面是个测试程序,测试正常!为何在我的程序里却无法比较呢??都是vc2010环境。只不过一个是控制台程序,一个是单文档界面程序。 #include "stdafx.h" #include <map> #include <string> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { map<string,string> mapShape_JZ; mapShape_JZ.insert(make_pair( "圆柱", \ "1CYL4, , ,R,90, , ,L \ /VIEW,1,1,1,1 \ /ANG,1 ")); mapShape_JZ.insert(make_pair( "fangzhu", \ "2CYL33, , ,R,90, , ,L \ /VIEW,1,1,1,1 \ /ANG,1 ")); mapShape_JZ.insert(make_pair( "柱", \ "3CYL4, , ,R,930, , ,L \ /VIEW3,1,1,1,1 \ /ANG,1 ")); string s("圆柱"); map<string,string>::iterator it; for(it=mapShape_JZ.begin();it!=mapShape_JZ.end();++it) { if(it->first.compare(s)==0) { cout<< it->second; } } return 0; }
sduxiaoxiang 2012-11-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/sennyrong/article/details/7403325

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧