前言

1.C++的string对中文的查找替换之类的基本操作并不友好,如果要对中文进行操作,要把中文转成宽字符(wstring)来解决,因为中文字符长度不确定的,在unicode中每个中文为2个字节,而字符串中有时还可能有英文数字字符等,这些只占一个字节1个字节,查找的过程很容易返回的不是找到的位置。
2.如果要操作中文字符串,比较好的办法先把string转成wstring,进行操作查找匹配操作之后,再转回来。
3.这里我定了个类,把它们之间的互相转换都封装成函数。

代码

Chinese.h

#pragma once
#include <string>
#include <iostream>class Chinese
{public:Chinese();~Chinese();//char*转换为wchar_t*wchar_t* MBCSToUnicode(wchar_t * buff, const char * str);//wchar*转换为char*char* unicodeToMBCS(char* buff, const wchar_t* str);//string转wstringstd::wstring strToWstr(std::string &input);std::string wstrToStr(std::wstring &wstr);char* wstrToChar(std::wstring &wstr);char* wstrToChar(const wchar_t* wstr);
};

Chinese.cpp

#include "Chinese.h"Chinese::Chinese()
{}Chinese::~Chinese()
{}wchar_t* Chinese::MBCSToUnicode(wchar_t* buff, const char* str)
{wchar_t * wp = buff;char * p = (char *)str;while (*p){if (*p & 0x80){*wp = *(wchar_t *)p;p++;}else {*wp = (wchar_t)*p;}wp++;p++;}*wp = 0x0000;return buff;
}char* Chinese::unicodeToMBCS(char* buff, const wchar_t* str)
{wchar_t * wp = (wchar_t *)str;char * p = buff, *tmp;while (*wp){tmp = (char *)wp;if (*wp & 0xFF00){*p = *tmp;p++; tmp++;*p = *tmp;p++;}else{*p = *tmp;p++;}wp++;}*p = 0x00;return buff;
}std::wstring Chinese::strToWstr(std::string &input)
{size_t len = input.size();wchar_t * b = (wchar_t *)malloc((len + 1) * sizeof(wchar_t));MBCSToUnicode(b, input.c_str());std::wstring r(b);free(b);return r;
}char* Chinese::wstrToChar(std::wstring &wstr)
{char* re = wstrToChar(wstr.c_str());return re;
}char* Chinese::wstrToChar(const wchar_t* wstr)
{int len = wcslen(wstr);char * buff = (char *)malloc((len * 2 + 1) * sizeof(char));char* re = unicodeToMBCS(buff, wstr);free(buff);return re;
}std::string Chinese::wstrToStr(std::wstring &wstr)
{size_t len = wstr.size();char * b = (char *)malloc((2 * len + 1) * sizeof(char));unicodeToMBCS(b, wstr.c_str());std::string r(b);free(b);return r;
}

main.cpp

#include <iostream>
#include <string>
#include "Chinese.h"int main()
{//输入层:接收char*输入,并将其转换为wchar*std::string input = "于老师的k父亲王老爷子是蒙古的海军司令!yes";std::string temp = "王";Chinese ch;std::wstring w_str = ch.strToWstr(input);std::wstring w_tem = ch.strToWstr(temp);int index = w_str.find(w_tem);std::cout << index << std::endl;return 0;
}

C++对中文字符的处理相关推荐

  1. java处理中文字符_Java中文字符处理的四大迷题

    虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...

  2. OpenCV支持中文字符输出实现

    在 http://www.opencv.org.cn/forum.php?mod=viewthread&tid=2083&extra=&page=1 中,作者给出了原始的在Op ...

  3. 打印出所有的中文字符

    2019独角兽企业重金招聘Python工程师标准>>> 尝试打出所有的中文字符,中文字符的16进制范围是[u4e00-u9fa5]. public static String toS ...

  4. mysql rpc_使用XML-RPC和MySQL处理中文字符

    我有一个异步Web服务,移动应用的用户可以在他们的手机上发表评论,它使用JSON将帖子上传到API,服务器将帖子输入到数据库中,并将确认发送回设备.服务器使用XML-RPC传递消息,但与设备的所有通信 ...

  5. python django mysql写入中文乱码_解决django 向mysql中写入中文字符出错的问题

    之前使用django+mysql建立的一个站点,发现向数据库中写入中文字符时总会报错,尝试了修改settings文件和更改数据表的字符集后仍不起作用.最后发现,在更改mysql的字符集后,需要重建数据 ...

  6. 浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

    pinyin4j项目  官网地址 http://pinyin4j.sourceforge.net/ 我们先把资源下载下来,连同源码和jar包一起放入工程.如下图: 接下来在demo包下,我们写一个测试 ...

  7. php怎样弄成中文,php怎样替换中文字符

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  8. 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集

    Java中的一个char采用的是Unicode编码集,占用两个字节,而一个中文字符也是两个字节,因此Java中的char是可以表示一个中文字符的. 但是在C/C++中由于采用的字符编码集是ASCII, ...

  9. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符

    正则表达式:java中匹配HTML中a标签中的中文字符 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: 特432 453543 a1特123你好123吗? 特2 标签中的文字现在要匹配出内容 ...

  10. c++ 把数字和中文字符分开_C语言中的字符常量与变量

    字符常量与变量   在这一节中,我们来讨论字符与字符串. 1. 字符常量   如果我想在屏幕上打印"HelloWorld".应该怎样做呢?大家应该很熟悉这个代码了. #includ ...

最新文章

  1. Struts2 配置文件手册
  2. 《系统集成项目管理工程师》必背100个知识点-28范围管理计划和需求管理计划...
  3. JDK14性能管理工具:jstat使用介绍
  4. Sql Server函数全解二数学函数
  5. GO开发 -- could not launch process: decoding dwarf section info at offset 0x0: too short
  6. body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
  7. 简述osi参考模型各层主要功能_OSI参考模型各层主要功能
  8. offer该怎么选:大公司or小公司?高薪or期权?
  9. L1-080 乘法口诀数列 (20 分)-PAT 团体程序设计天梯赛 GPLT
  10. protobuf序列化使用说明
  11. opencv学习之------在算法设计中使用策略模式
  12. 【短时平均过零率】基于matlab语音信号短时平均过零率【含Matlab源码 1721期】
  13. python实现火车票查询_Python 实现火车票查询工具
  14. 顶尖领导者的52条法则!
  15. 分析一下前段很火的玩客云(区块链相关产品)
  16. 请推荐几个程序员面试时自我介绍的范文!
  17. python中traceback获取异常信息
  18. R语言对大文件excel按行分解。
  19. Mysql语句执行逻辑
  20. linux xenserver教程,XenServer教程:XenCneter实现热迁移步骤

热门文章

  1. 数据挖掘算法_数据挖掘算法入门
  2. python转csv_python如何将列表存储为csv文件
  3. 《漫画算法2》源码整理-9 股票交易最大收益
  4. 基于 Python Matplotlib 模块的高质量图形输出
  5. Python爬虫入门(4):Urllib库的高级用法
  6. 信息系统项目管理师历年论文题目
  7. 【python图像处理】彩色映射(续篇)
  8. 42. Vue、React 等前端项目部署,刷新 404 问题解决方案
  9. Android 分享控件
  10. Redis AOF 全持久化