字符串在非常多编程语言中已经成为基本数据类型,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
时间: 2024-11-01 11:47:23