VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3620|回复: 83
打印 上一主题 下一主题

《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用

  [复制链接]
51_avatar_middle
跳转到指定楼层
1#
online_admins 发表于 2018-12-17 22:43:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、string 扩展类简介:
这里呢,前几个月吧,有个项目,要进行跨平台,支持 Windows系统,也要支持 Linux 系统,所以这里我就必须使用 C++ 的东西了,不能使用 MFC 之类的,因为不跨平台。C++ 标准模板库 STL 中的 stirng 还比较简陋,用起来确实很不方便,于是也是为了自己方便使用,就新写了个 string 扩展的工具类:string_util,实现对 string 功能的全面扩展。把我们平时常用的一些操作统统都封装进去,需要用的时候直接调用就可以了。

2、string_util 功能简介:
string_util 封装的时候考虑到了大家常用的一些字符串操作,所以对其进行了封装,方便大家以后的使用,具体包含的功能如下:
  1. class string_util
  2. {
  3. public:
  4.     string_util();
  5.     ~string_util();

  6. public:
  7.     static std::string& trim_l(std::string &str); //去掉字符串左侧的空白字符
  8.     static std::string& trim_r(std::string &str); //去掉字符串右侧的空白字符
  9.     static std::string& trim(std::string &str); //去掉字符串左右两侧的空白字符
  10.     static std::string& reverse(std::string &str); //对字符串进行首尾反转

  11.     static std::string& to_upper(std::string &str); //将字符串转换成大写
  12.     static std::string to_upper_copy(std::string &str); //生成一个当前字符串的拷贝的大写字符串

  13.     static std::string& to_lower(std::string &str); //将字符串转换成小写
  14.     static std::string to_lower_copy(std::string &str); //生成一个当前字符串的拷贝的小写字符串

  15.     static std::string left(std::string &str, size_t n_count); //返回当前字符串左侧的n_count个字符
  16.     static std::string right(std::string &str, size_t n_count); //返回当前字符串右侧的n_count个字符
  17.     static std::string mid(std::string &str, size_t i_start, size_t n_count); //返回当前字符串中间的n个字符
  18.     static std::string mid_l_r(std::string &str, std::string str_left, std::string str_right, bool b_inc_start = false, bool b_inc_end = false); //以首尾关键字来查找指定的字符串并返回
  19.     static std::string span_including(std::string& str, std::string str_key); //返回在str中包含str_key中任意字符的子串
  20.     static std::string span_excluding(std::string& str, std::string str_key); //返回在str中不包含str_key中任意字符的子串

  21.     static bool start_with(std::string &str, std::string str_begin); //str字符串是否以str_begin字符串开头
  22.     static bool end_with(std::string &str, std::string str_end); //str字符串是否以str_end字符串结尾
  23.     static bool contain(std::string &str, std::string str_sub); //str字符串是否包含str_sub子串
  24.     static bool is_empty(std::string &str); //str字符串是否为空串

  25.     static std::string format(const std::string fmt, ...); //格式化字符串
  26.     static std::string& append_format(std::string& str, const std::string fmt, ...); //格式化字符串并添加到str结尾
  27.     static std::string& erase(std::string& str, char ch); //删除str字符串中的所有ch字符
  28.     static bool replace(std::string& str, const std::string& from, const std::string& to); //替换str字符串中的第一处from字符串为to字符串
  29.     static void replace_all(std::string& str, const std::string& from, const std::string& to); //替换str字符串中的所有from字符串为to字符串
  30.     static int string_i_cmp(std::string lhs, std::string rhs); //不区分大小写比较字符串
  31.     static void split(std::string& str, std::string pattern, vector<std::string>& arrout); //将str字符串以pattern分隔符进行分割,结果放到arrout数组中
  32.     static std::string join(std::vector<string>& arr_string, std::string pattern = ""); //将arr_string数组中的多个字符串以pattern分隔符进行连接

  33.     static std::wstring a2w_string(std::string str_a); //将窄字节字符串转换成宽字节unicode字符串
  34.     static std::string w2a_string(std::wstring str_w); //将宽字节unicode字符串转换成窄字节字符串

  35.     static string_t to_string(std::string str_a); //将窄字节字符串转换成通用的字符串类型string_t
  36.     static string_t to_string(std::wstring str_w); //将宽字节unicode字符串转换成通用的字符串类型string_t

  37.     static std::wstring to_wstring(string_t str); //将通用的字符串类型string_t转换成宽字节unicode字符串
  38.     static std::string to_astring(string_t str); //将通用的字符串类型string_t转换成窄字节字符串

  39. public:
  40.     static std::wstring gbk2unicode(std::string str_gbk); //窄字节转换成unicode宽字节
  41.     static std::string unicode2gbk(std::wstring str_unicode); //unicode宽字节转换成窄字节

  42.     static std::string gbk2utf8(std::string str_gbk); //窄字节转换成utf8编码的字符串
  43.     static std::string utf82gbk(std::string str_utf8); //utf8编码的字符串转换成窄字节

  44.     static std::string unicode2utf8(std::wstring str_unicode); //unicode宽字节字符串转换成utf8编码的字符串
  45.     static std::wstring utf82unicode(std::string str_utf8); //utf8编码的字符串转换成unicode宽字节字符串
  46. };
复制代码


3、string_util 常用功能的使用:
接下来就给大家演示下常用的功能使用,具体看视频教程讲解!!!

4、宽窄字节字符串的任意转换:
  1. string str_a = "你好123";
  2. wstring str_w = L"哈哈456";

  3. string str_dst_a = string_util::to_astring(str_w);
  4. wstring str_dst_w = string_util::a2w_string(str_a);
复制代码


备注:宽窄字节转换这块,string_util 类提供了三种方式的转换,具体大家选一种适合自己的就行!
#define CODE_CONVERT_USE_CPP11 //使用跨平台的C++11新增的方式来进行转换
#define CODE_CONVERT_USE_WIN32 //使用Win32Api的方式来进行转换
#define CODE_CONVERT_USE_ICONV //使用开源跨平台的ICONV这个万能编码库来进行转换,需要包含iconv库到工程中才行

三种方式中大家要用哪种就定义哪个宏就可以了。

具体使用见视频教程演示!

5、应用到实际项目中的应用:

当前工程是Unicode宽字节编码:
  1. string str_tip = "你好啊,小3";
  2. AfxMessageBox(string_util::to_string(str_tip).c_str());
复制代码


备注:相关课程细节及演示详见视频教程!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38413272/?p=5
https://www.bilibili.com/video/av38413272/?p=6
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1iLUwwq3xfH57ALjmFlEIZg 提取码:updr
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^





上一篇:《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点
38_avatar_middle
2#
online_vip 发表于 2018-12-18 10:36:07 | 只看该作者
这种帖子狂顶啊《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用
87_avatar_middle
3#
在线会员 发表于 2018-12-18 11:04:02 | 只看该作者
谢谢谢老大分享,顶一下
32_avatar_middle
4#
在线会员 发表于 2018-12-18 18:27:53 | 只看该作者
这种帖子狂顶啊
75_avatar_middle
5#
在线会员 发表于 2018-12-18 19:48:55 | 只看该作者
学习学习《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用
69_avatar_middle
6#
在线会员 发表于 2018-12-18 20:22:33 | 只看该作者
《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用谢谢楼主分享
81_avatar_middle
7#
online_vip 发表于 2018-12-18 21:22:46 | 只看该作者
群主辛苦了
16_avatar_middle
8#
在线会员 发表于 2018-12-19 09:02:49 | 只看该作者
谢谢分享。
13_avatar_middle
9#
在线会员 发表于 2018-12-19 19:20:28 | 只看该作者
看下新知识
08_avatar_middle
10#
在线会员 发表于 2018-12-19 19:38:26 | 只看该作者
《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用
04_avatar_middle
11#
online_vip 发表于 2018-12-19 21:38:51 | 只看该作者
真的是好地方,学到东西了
78_avatar_middle
12#
在线会员 发表于 2018-12-20 08:40:23 | 只看该作者
谢谢谢老大分享,顶一下
61_avatar_middle
13#
在线会员 发表于 2018-12-20 15:41:20 | 只看该作者
谢谢谢老大分享
86_avatar_middle
14#
在线会员 发表于 2018-12-20 15:48:48 | 只看该作者
找这个网站太久了,这个课程太棒了
21_avatar_middle
15#
在线会员 发表于 2018-12-20 23:08:19 | 只看该作者
老大终于对string下手了!
95_avatar_middle
16#
在线会员 发表于 2018-12-21 08:38:05 | 只看该作者
感谢老大分享精彩教程
77_avatar_middle
17#
在线会员 发表于 2018-12-21 09:12:37 | 只看该作者
顶一下顶一下顶一下顶一下
83_avatar_middle
18#
在线会员 发表于 2018-12-23 21:29:00 | 只看该作者
玩儿玩儿玩儿玩儿为
87_avatar_middle
19#
online_vip 发表于 2018-12-24 11:23:16 | 只看该作者
要进行跨平台,支持 Windows系统,也要支持 Linux 系统
12_avatar_middle
20#
在线会员 发表于 2018-12-24 16:42:51 | 只看该作者
本帖最后由 [email protected] 于 2018-12-24 16:45 编辑

cpp封装的多了也可以实现写少量的代码实现强大的功能~
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-10-15 03:51

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表
时时彩平台排名