构造:
#include<string>
int main()
{
string s0; //空字符串
string s1 {"As simple as that!"}; //用C风格字符串构造
string s2 {s1}; //拷贝构造函数
//析构函数几乎总是被隐式调用
string s3 {7}; //错误: 没有string(int)
string s4 {'a'}; //错误: 没有string(char);
string s5 {7,'a'}; // 7个a
string s6 {0}; //危险:传递nullptr
const char* p = 0;
string s7{p}; //可能正确也可能错误,取决于p的值。
//string::npos 表示一个超出string长度的位置,通常用来表示string尾部。
string ss {"Fleetwood Mac"};
string ss2 {ss,0,9}; //"Fleetwood"
string ss3 {ss,10,string::npos}; //"Mac"
//注意,子串的表示方式是(位置,长度)而不是【开始,结束)。
}
基本函数:
#include<string>
int main()
{
s == s2;
s != s2;
s < s2; //按字典序比较
s <= s2;
s > s2;
s >= s2;
n = s.size(); //n为s中的字符数(当前)
n = s.length(); //n = s.size()
n = s.max_size(); //n为s.size()的最大可能值
s.resize(n,c); //令s.size() == n; 新增元素的值均为c
s.resize(n); //s.resize(n,C{})
s.reserve(n); //确保s不用分配更多空间即可保存n个字符
s.reserve(); //无影响: s.reserve(0)
n = s.capacity(); //s的容量(最大容纳数量)
s.shrink_to_fit() //令s.capacity() == s.size()
s.clear(); //令s变为空
s.empty(); //s为空?空的话返回true
}
#include<string>
int main()
{
s[i]; //(不进行范围检查)
s.at[i]; //若s.size() <= i 抛出range_error
s.front(); //s的第一个元素
s.back(); // s的最后一个元素
s.push_back(c); //追加字符c
s.pop_back(); // 删除s的尾字符: s.esrase(s.size()-1)
s+=x; //在s的末尾追加x;x可以是一个字符,一个string,一个C风格字符串等等
s = s1+s2; //连接
s.swap(s2); //交换s和s2的值
swap(s,s2); //同上。
p = s.begin(); //类stl操作也可以用
p = s.end();
s.assign(s2,pos,n) //s获得字符s2[pos:pos+n)
s.erase(pos,n); //删除s中从s[pos]开始的n个字符;s.size()变为max(pos,s.size()-n).
s.repalce(); // 将一个子串替换成为另一个子串,并相应调整string大小。
//x可以是一个字符,string,C风格的字符串等
pos = s.find(x); // 在s中查找x;pos为匹配的第一个字符的下标或string::npos
pos = s.rfind(x); //逆序查找。未找到返回string::npos
}
如何从string中找到特定元素并删除:
string str("ab'defg");
string::iterator it;
for (it =str.begin(); it != str.end(); ++it)
{
if ( *it == '\'')
{
str.erase(it);
}