C++手稿:std::string
2015-08-18 14:23
375 查看
字符串在很多编程语言中已经成为基本数据类型,C语言中我们使用
在C++中,可以使用
C++的
参考文档:cplusplus.com/string
也可以用N个同样的字符来构造字符串:
在C0x标准中,
字符串可以直接互相赋值,内存会自动拷贝和销毁,我们大可不必管它。对于单个字符赋值可以使用下标运算符:
与多数class类似,
有通用运算符支持的数据类型往往更容易理解和操作,其中最讨人喜欢的莫过于
当然,你也可以直接调用
除了
当然,你仍然可以直接调用
字符串为空
字符串长度
字符串内存
在C++中,标准输入输出、文件、字符串都可以作为一个流,来接受输入或者输出。 在C++中字符串流也是格式化输出的一种常用手段。
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/06/30/std-string.html
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)将会交换二者的值。
运算符支持
有通用运算符支持的数据类型往往更容易理解和操作,其中最讨人喜欢的莫过于+运算符:
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, 3, "ll"):下标2开始的3个字符换成
"ll"。
insert(2, "ll"):下标2处插入
"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++手稿:封装与继承
- C++手稿:虚函数与多态
- C++的继承与派生
- C++手稿:运算符重载
- C++ :: 的用法小结
- 用c++写2048
- C/C++数据类型的转换之终极无惑
- C/C++数据类型的转换之终极无惑
- 基于C语言的DB2数据库开发
- 解决Visual C++ 中相互包含头文件的问题
- c++ 11 新特性
- C/C++零基础教程,游戏开发入门
- C语言:链表的反向输出(反转链表+栈结构)
- 细数Python与C++的区别(更新中……)
- C语言判断文件是否存在
- Java与c++的一些同异
- Effective C++ 条款4 确定对象被使用前已被初始化
- [转]VC++操作Word
- 【Vijos P1007】绕钉子的长绳子 c++题解
- 3sum leetcode (15)