C++标准库-String类
String
C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。
string数据结构可以看作char类型的数组,在Cpp中可以看作vector
常用方法
std::reverse(iterator,iterator) 反转字符串,范围由形参给出
c_str() 把字符串转成C风格的字符串
size()或length() 返回当前字符串的长度
erase() 删除特定字符,重载较多,具体看手册
append() 字符串拼接,具体看手册
insert() 字符串插入
clear() 清空这个字符串对象
compare() 对比字符串,相等返回0
assign() 赋值,替换该对象
at() 参数是int类型,返回值是char,返回下标为int类型的字符
back() 返回字符串最后一个字符
front() 返回字符串的第一个字符
sbustr() 截取指定位置的字符串
replace() 替换指定位置的字符串
swap() 交换字符串值
pop_back() 删除最后一个字符
push_back() 在字符串最后加入一个字符
STL标准模板库的方法(iterator)
begin() 返回指向第一个字符的迭代器地址
end() 返回指向最后一个字符的下一个空间的迭代器地址
rbegin() 返回一个反向迭代器,指向最后一个字符的迭代器地址
rend() 返回一个反向迭代器,指向第一个字符的前一个字符的迭代器地址
cbegin() 返回一个指向第一个字符的const_iterator(用const修饰的迭代器)
cend(),crbegin(),crend() 同理,加上c就是const
查找方法
find()=find_first_of() 查找字符串中指定的子串首次出现的下标,如果找不到匹配项,则返回std::npos(-1)
rfind()=find_last_of() 查找字符串中指定子串最后出现的下标
find_first_not_of() 在字符串中搜索与参数中指定的任何字符都不匹配的第一个字符下标
find_last_not_of() 在字符串中搜索与参数中指定的任何字符都不匹配的最后一个字符下标
标准库对string class 的操作符重载
operator+ 支持字符串拼接
operator= 支持字符串赋值
operator+= 支持字符串拼接后重新赋值给对象自己
operator== 支持用==操作符比较两个字符串对象是否相等
istream& operator>>(istream& is,string& str) 从输入流中提取一个字符串,赋值到str对象上
ostream& operator<<(ostream& is,string& str) 将str对象的值,插入到输出流
operator[] 赋予字符串像操作数组一样的操作方式
示例代码
string str = "hello,world!";
string sss = "hello,world!";
const char* charstr = str.c_str(); //返回'h'字符的地址给char*类型的charstr
const char* i = str.data(); //返回首字符的地址,效果和c_str差不多
int size = str.size(); //size = 13,返回当前字符串对象str的长度
size = str.length(); //size = 13,length()和size()效果一样
str.erase(5); //str==hello,删除元素从str[5]开始后面的所有元素,重载很多,具体用法看手册
str.append(",world!"); //str==hello,world!,字符串拼接(可以从不同的地方插入字符串,重载很多,具体看手册)
str.insert(str.begin(),'a'); //str==ahello,world!,插入单个字符,重载多,具体看手册
str.insert(0, "aaaa");//str==aaaaahello,world!,也是可以得到和append一样的效果的
str.erase(0, 5); //str==hello,world!,删除特定字符串,也可以是字符,具体看函数的重载
int result = str.compare(sss); //由于sss等于str所以返回0
sss.clear(); //清空sss
result = str.compare(sss); //两个字符串不相等,返回1
str.assign("hello"); //str==hello 把hello赋值到str对象,不管str对象是否有数据。
sss.assign(str.c_str(), 0, 2); //sss==he 把str对象的下标为[0,2)的字符赋值到sss。
char a2 = str.at(2); //a2==l at()把str下标为2的字符返回给char类型的a2。
a2 = str.back(); //a2==o back()把str对象的最后一个字符返回给char类型的a2。
a2 = str.front(); //a2==h 返回第一个字符
string ss = str.substr(0,2);//ss==he 截取str对象下标为[0,2)的字符赋值到ss,不会改变str对象本身。
int a3 = str.capacity(); //a3==31 返回系统对当前对象分配的空间。
str.replace(0, 2, "ab"); //str==abllo 替换[0,2)下标的字符为ab
str.replace(str.begin(), str.end(), "hello"); //str==hello 范围是从头到尾,替换成hello