string s1; // 构造空的string类对象s1
string s2("hello"); // 用C格式字符串构造string类对象s2
string s3(s2); // 拷贝构造s3
s.size() //返回字符串有效字符长度
s.capacity() //返回总空间大小
s.empty() //判断字符串是否为空,为空返回true
s.clear() //清空有效字符,不改变空间大小
注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变 。
s.resize(8) //重新设置s字符串的有效个数为8,更改的是size
s.resize(10,'x') //重新设置字符串有效字符的长度为10,并且多余位置用x填充
reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小
s.reserve(100) ; //reserve更改的是capacity容量
operator[]
string s1("hello!");
s.[0]; //类似c数组方括号操作
begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭
代器(rbgin和rend是反向遍历)也可以在遍历过程中修改遍历对象。
使用迭代器遍历string:
sring::iterator it = s.begin();
while(it != s.end())
{
cout<<*it<
使用范围for遍历:
for(auto ch : s)
cout << ch << endl;
s.push_back(' '); // 在s后插入空格
s.pop_back(' '); //在s前插入空格
append追加接口:
s.append("hello"); // 在s后追加一个字符hello
s.append(2, 'h'); //在s后加两个h
string s2;
s2.append(s); //在s2后追加s字符串
string s3;
s3.append(s, 3, 2); //在s3后边追加s字符串从3个位置开始,复制2个字符
还可以使用operator+=:
s += 'a'; // 在s后追加一个字符a
s += "bc"; // 在s后追加一个字符串bc
cout<
find查找接口:
string f("string.cpp");
//find是从前往后找,找到返回位置,没找到返回npos,npos是一个非常大的正数
size_t pos = f.rfind('.'); //rfind从后往前找字符'.'
//sbustr函数在字符串中从pos位置开始,截取n个字符,然后将其返回。
string sf(f.substr(pos, f.size()-pos));
cout << sf << endl;
删除接口:
string s("hello");
s.erase(0, 2); // 从0位置开始,删除两个元素
//(如果内容太短或len是string::npos,则直到字符串结束)
s.erase(s4.begin()); //删除第一个字符
s.erase(s4.end()); //删除最后一个字符
s.erase(s4.begin(), s4.end()); //删除从头到尾的所有字符
赋值接口:
s.assign("11111"); //相当于s = 11111;原本s中的内容被覆盖
插入insert接口:
string s1;
string s2("hello");
s1.insert(0,"abcdefg") //从s1的0位置开始插入字符串
s1.insert(3, 5, "abcdefg") //从3位置开始只插入字符串的前5个字符
s1.insert(3, 6, "h") //从3位置开始插入6个h
s1.insert(0, s2); //字符串s1从0位置开始插入s2
s1.insert(0, s2, 2, 3);
//从s1的0位置开始,把字符串s2的第2个位置复制3个字符插入
s4.insert(s4.end(), 3, 'a'); //也可以使用迭代器插入,尾插3个a
s4.insert(s4.end(), strArr + 1, strArr + 3);
//插入str从第2个位置开始到第4个位置结束
replace替换接口:
string s = "0123456789";
s.replace(3, 5, "aa"); //从索引为3的位置替换5个字符换成aa,012aa89
s.replace(s.begin() + 1, s.end() - 1, "0");
//把从头后一个位置,到尾前一个位置替换成0;
swap交换接口:
//string类中有一个swap成员函数,但在类外也有个swap全局函数,这个全局swap是个泛型函数,可以自动匹配参数类型
string s = "abc";
string s1 = "jkl";
s.swap(s1); //调用string成员函数
swap(s2, s); //调用全局string类型的swap函数,内部调用string的成员函数swap完成交换
重载><:
string s1("123");
string s2("03");
int ret = s1 > s2; //这里>是按位按ascii码表比大小,所以s2>s1,返回true
string支持运算符>>和<<,但是cin遇到空格就停止读取了
getline函数:
string s;
//cin >> s; //遇到空格就停止读取,所以不建议使用
getline(cin, s); //一般用getline读取
//从标准输入里读取字符,存到字符串s里,默认遇到换行符停止读取。
cout << s;
getline(cin, s, ','); //读取遇到逗号停止读取