技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 772|回复: 1
收起左侧

【C++】std::string的一些学习记录

[复制链接]

36

主题

146

帖子

7189

积分

用户组: 管理员

UID
77
精华
11
威望
115 点
宅币
6626 个
贡献
132 次
宅之契约
0 份
在线时间
107 小时
注册时间
2014-2-22
发表于 2016-7-8 18:17:47 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
原帖网址:http://www.m5home.com/bbs/thread-8848-1-1.html
未经允许请勿转发

前言:我本人一直很不待见C++,但公司里的工程都是C++写的,不爽归不爽,还是被迫使用了一段时间。最近发现C++比起C来,某些地方还是有点优势的,比如字符串处理。C++里字符串类型很多,除了经典的CHAR*和WCHAR*,还有CString和std::string。个人不推荐用CString,因为这货是微软一家的,而std::string则是多平台兼容的。

一、使用std::string需要包含什么?
  1. #include <string>
复制代码
二、如何利用std::string和std::vector实现类似VB6的Split函数(根据标识符把字符串分割为多个子字符串)?
  1. #include <string>
  2. #include <vector>

  3. void SplitStdString(const std::string& s, std::vector<std::string>& v, const std::string& c)
  4. {
  5.         std::string::size_type pos1, pos2;
  6.         pos2 = s.find(c);
  7.         pos1 = 0;
  8.         while(std::string::npos != pos2)
  9.         {
  10.                 v.push_back(s.substr(pos1, pos2-pos1));
  11.                 pos1 = pos2 + c.size();
  12.                 pos2 = s.find(c, pos1);
  13.         }
  14.         if(pos1 != s.length())
  15.                 v.push_back(s.substr(pos1));
  16. }

  17. int main()
  18. {
  19.         char g_fw_policy1[]="4444;333;22;1";
  20.         char g_fw_policy2[]="a||bb||ccc||dddd";
  21.         std::vector<std::string> v;
  22.         std::string s;
  23.         //
  24.         s = g_fw_policy1;
  25.         SplitStdString(s,v,";");
  26.         for(long i=0;i<v.size();i++)
  27.                 puts(v.at(i).c_str());
  28.         //
  29.         v.clear();
  30.         s = g_fw_policy2;
  31.         SplitStdString(s,v,"||");
  32.         for(long i=0;i<v.size();i++)
  33.                 puts(v.at(i).c_str());
  34.         system("pause");
  35.         return 0;
  36. }
复制代码
三、如何把std::string转为CString
  1. CString cs = ss.c_str();
复制代码


评分

参与人数 1威望 +1 宅币 +10 贡献 +1 收起 理由
0xAA55 + 1 + 10 + 1 屌!

查看全部评分

1041

主题

2328

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
217
威望
288 点
宅币
18062 个
贡献
36589 次
宅之契约
0 份
在线时间
1732 小时
注册时间
2014-1-26
发表于 2019-7-30 18:47:36 | 显示全部楼层
论stl的常见例子和应用。

说起来我踩过string的+运算符重载的坑,虽说我不会傻到用一个存储了十进制数字的string去 + 一个int,但我踩的其实是性能优化上的坑:用一个string去装一个string + 另一个string的结果,这个过程中的内存分配、构造、析构都很多。原本设想会很快的程序快不起来,搞得我很头疼。

从那以后我发现还有个叫“stringstream”的玩意儿用于使用类似cout的方式实现快速拼接字符串。
[C++] 纯文本查看 复制代码
ostringstream os;
os << "dec: " << 15 << " hex: " << std::hex << 15 << endl;
cout << os.str() << endl;
https://stackoverflow.com/questi ... gstream-do/44782764
https://en.cppreference.com/w/cpp/io/basic_stringstream

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-8-19 11:41 , Processed in 0.099386 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表