C++手稿:std::string
字符串在非常多编程语言中已经成为基本数据类型,C语言中我们使用char*来手动申请和维护字符串,
在C++中,能够使用std::string来方便地创建和操作字符串。
string是一个模板类。它有basic_string<T>定义:
typedef basic_string<char> string;
C++的
string能够通过成员方法c_str()转换为C语言的char*。
參考文档:cplusplus.com/string
初始化与赋值
string有两个经常使用的构造函数:
// 用一个C字符串构造
string str("hello");
// 等价于
string str = "hello";
也能够用N个相同的字符来构造字符串:
string。
str2(8, 'x')
在C0x标准中,std::to_string能够将非常多类型转换为一个string,能够取代itoa,比如:
string str = to_string(123);
string构造函数不接受char和int类型。
字符串能够直接互相赋值,内存会自己主动拷贝和销毁。我们大可不必管它。对于单个字符赋值能够使用下标运算符:
for(int i=0;i<str.length(); i++){
str[i] = 'a';
}
与多数class类似。
string也提供了swap:str1.swap(s2)将会交换二者的值。
运算符支持
有通用运算符支持的数据类型往往更easy理解和操作,当中最讨人喜欢的莫过于+运算符:
str += str2;
str = str + "hello";
当然,你也能够直接调用
append方法:str.append(str2)。
除了+,string还支持一系列的比較运算符:<, ==, >, <=, >=, !=。
当然,你仍然能够直接调用
compare方法:str1.compare(str2),str1小则会返回-1。
长度
- 字符串为空
empty():返回是否为空。clear():清空字符串。
- 字符串长度
length():等效于size()。返回字符串长度。resize(10,:改变长度。假设超过了原有长度,后面补
'x')x,第二个參数默认值为null。
- 字符串内存
capacity():无需再次申请内存可存放的字符数。reserve(10):申请10字符的内存。通常在大量的insert前先reserve一下。避免多次申请内存。
查找
str.find("ll"):字符串ll在str中第一次出现的下标,未找到为string::npos。str.rfind("ll"):同上,从右向左查找。str.find("ll",:从下标3開始查找。
3)
改动
erase(5):去掉下标5開始的全部字符。replace(2,:下标2開始的3个字符换成
3, "ll")"ll"。insert(2,:下标2处插入
"ll")"ll"。
流处理
在C++中。标准输入输出、文件、字符串都能够作为一个流,来接受输入或者输出。 在C++中字符串流也是格式化输出的一种经常使用手段。
string input("test 123");
istringstream sinput(input);
string str;
int i;
sinput >> str >> i;
ostringstream soutput;
soutput << str << i;
cout<< soutput.str();
// test123
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/06/30/std-string.html
C++手稿:std::string的更多相关文章
- QString 和std::string互转
std::string cstr; QString qstring; //****从std::string 到QString qstring = QString(QString::fromLocal8 ...
- std::string的split函数
刚刚要找个按空格分离std::string的函数, 结果发现了stackoverflow上的这个问题. 也没仔细看, 直接拿来一试, 靠, 不对啊, 怎么分离后多出个空字符串, 也就是 "a ...
- could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'
VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Relea ...
- 源码阅读笔记 - 3 std::string 与 Short String Optimization
众所周知,大部分情况下,操作一个自动(栈)变量的速度是比操作一个堆上的值的速度快的.然而,栈数组的大小是在编译时确定的(不要说 C99 的VLA,那货的 sizeof 是运行时计算的),但是堆数组的大 ...
- CString std::string相互转换
CString->std::string 例子: CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0); s ...
- 计算std:string的字节长度
如果项目本身是使用 Unicode 字符集和utf8编码,std::string的length(),size()甚至是c的strLen取到的都是字节长度了,比如三个汉字,就是9, 以上情况不满足的话, ...
- 【原】error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string'
今天遇到一个非常难以排查的BUG,谷歌度娘都问过了依旧无解,最后自己重新尝试之后找到解决方案: 先看一下报错信息: 1>.\lenz.cpp(2197) error C2679: binary ...
- 类型安全且自动管理内存的返回 std::string 的 sprintf 实现
在这篇博文里,我提到了一个例子,说的是使用C++实现类型安全的printf.这个例子很惊艳,但是在我写程序的时候,并非那么"迫切"地需要它出现在我的工具箱中,因为它并不比普通的pr ...
- VC++ 中使用 std::string 转换字符串编码
目录 第1章说明 1 1.1 代码 1 1.2 使用 4 第1章说明 VC++中宽窄字符串的相互转换比较麻烦,借助std::string能大大减少代码量. 1.1 代码 函数声明如下 ...
随机推荐
- poj1681 Painter's Problem
题目描述: 和那道关灯差不多,求最少涂几次. 题解: 高消,然后深搜枚举自由元更新答案. 貌似这道题没卡贪心但是其他题基本都卡了. 比如$Usaco09Nov$的$lights$ 代码: #inclu ...
- HTML5新增的主体元素article、section、nav、aside、time元素和pubdate属性
article artticle元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引用的内容.它可以是一篇博客或者报刊中的文章,一篇论坛帖子,一段用户评论或者独立的插件或其他任何独立的内容. ...
- hibernate中时间比较的小笔记
// 开单时间 if (!"".equals(startDate) && startDate != null) { queryCondition = queryCo ...
- Android开发——Activity生命周期
Android开发--Activity生命周期 Activity作为四大组件之首,也是使用最频繁的一种组件.本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下 ...
- CDOJ 1225 Game Rooms
Game Rooms Time Limit: 4000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Your ...
- XV6第一个进程
第一个进程 本章通过第一个进程的创建来解释 xv6 是如何开始运行的,让我们得以一窥 xv6 提供的各个抽象是如何实现和交互的.xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码. ...
- DataTable 转JSON数据
/// <summary> /// 将datatable转换为json /// </summary> /// <param name="dtb"> ...
- [luoguP2679] 子串(DP)
传送门 气死我了,自己YY的方法只能得70分. 一个下午都在搞这道题. 至于正解,真的不想写了. 请移步 here #include <cstdio> #define M 201 #def ...
- MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- 网络安全法与LogSec日志安全大数据审计平台
https://blog.csdn.net/chengpeng1144/article/details/73555331 https://blog.csdn.net/dcbeyond/article/ ...