C++string类常用接口

string类

1.string类的构造

string s1;    // 构造空的string类对象s1
string s2("hello");    // 用C格式字符串构造string类对象s2
string s3(s2);    // 拷贝构造s3 

2.string类对容量的接口

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容量

3.string类对象的访问及遍历

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;

4.string类对象的修改操作

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, ',');  //读取遇到逗号停止读取

你可能感兴趣的:(C++)