前言:
string是C++标准库最重要的类型之一,string支持长度可变的字符串,其包含在string头文件中
#include <string> // 注意这里不是string.h,string.h是C字符串头文件
(1)string常用初始化操作
//声明string对象 string s1; //初始化 string s2 = "hello"; //使用字符串初始化 string s3 = s2; //用一个string对象初始化另一个string对象 string s4(4, 'c'); //使用n个字符初始化 string s5("hello", 2); //将字符串的前n个字符赋值给s5 string s6(s2, 2, 2); //将s2从pos位置开始的len长度字符串赋值给s6 string s7(s2, 2); //将s2从pos位置开始的子串赋值给s7 string s8(s2.begin(), s2.end()); //将s2某个区间的子串赋值给s8
(2)string增删改查
//增 s1.insert(pos, "hello"); //从pos位置起,增加char *字符串 s2.insert(pos, s1); //从pos位置起,增加字符串 s2.insert(pos, n, 'c'); //从pos位置开始,增加n个字符 s2.insert(pos, s1, pos2, len); //从pos位置起,插入s1的从pos2开始的len长度字符串 //删 s3.erase(pos, len); //删除从pos位置开始的n个字符 s3.erase(s3.begin()+1, s3.begin()+2); //删除某个指定区间的元素 //改 s4.replace(s4.begin(), s4.end(), "hello"); //替换指定区间内的字符 s4.replace(pos, len, "shao"); //替换从pos位置开始的len长度的字符串 //查 int find(const string&str, int pos =0) const; //查找str第一次出现位置,从pos开始查找 int find(const char *s, int pos =0) const; //查找s第一次出现位置,从pos开始查找 int find(const char *s, int pos, int n) const; //从pos位置开始查找s的前n个字符第一次出现位置 int find(const char c, int pos =0) const; //查找字符c第一次出现位置 其他: int rfind() //逆序查找,即最后一次出现的位置 s.find_first_of(args); //在s中查找args的任意字符的第一次出现 s.find_last_of(args); //在s中查找args的任意字符的最后一次出现 s.find_first_not_of(args); //在s中查第一个不属于args的字符 s.find_last_not_of(args); //在s中查找最后一一个不属于args的字符
(3)string存取操作
s1.at(pos) //通过at方法获取pos位置的字符 s1[pos] //通过[]方法获取pos位置的字符
区别:at会抛出越界异常
(4)string拼接
string对象的加法被定义为拼接,如把s2追加到s1的末尾可直接用s1+=s2表达式即可。当需要string对象和字符串混合拼接时,+操作符的左右操作数中必须有一个是string对象
string s1="hello"; string s2="world"; string s3=s1+","; //合法 string s4="hello"+","; //非法,+号两边都没有string对象 string s5=s1+","+"hello"; //合法,s1先和","拼接返回一个string对象,再和"hello"拼接 string s6="hello"+","+s2; //非法,"hello"先和","进行+操作,两个都不是string对象 常用方法: String& operator += (const string& str); //string + string类型 String& operator += (const char * str); //string + char *类型 String& operator += (const char c); //string + char 类型 String& append(const char *s); //把字符串s连接到当前string的结尾 String& append(const char *s, int n); //把字符串s的前n个字符连接到当前string结尾 String& append(const string &s); //将string连接到当前string的结尾 String& append(const string &s, int pos, int n); //把string从pos开始的n个字符连接到当前string String& append(int n, char c); //在当前string结束添加n个字符c
(5)string比较
注意:compare函数在>时返回1,<时返回-1,==时返回0
比较区分大小写,参考字典顺序,排越前面的越小,如A比a小
Int compare(const string &s) const; //与string类型比较 Int compare(const string &s) const; //与char *类型比较
常用方法:
s.compare(s2); //比较s和s2
s.compare(pos1,n1,s2); //让s中从pos1下标位置开始的n1个字符与s2做比较
s.compare(pos1,n1,s2,pos2,n2); //让s中从pos1下标位置开始的n1个字符与s2中从pos2开始的n2个字符相比较
(6)string子串
s.substr(pos,n); //返回一个string类型的字符串,它包含从s从下标pos开始的n个字符 s.substr(pos); //返回一个string类型的字符串,它包含从下标pos开始到s的末尾的所有字符
(7)string和c-style字符串转换
C++提供的由C++字符串得到对应的C_string的方法是使用data()和c_str():
//string转const char * String str = “str to cstr”; Const char * cstr = str.c_str(); //char * 转string Char * s = “cstr to str”; String str(s); 注意:在C++中应坚持使用string类型进行运算,除非最后必须要转化为char*,可以用函数strcpy实现 string str = "Hello World"; int len = str.length(); char *data = new char[len+1]; strcpy(data, str.c_str());
其他方法:
s.assign() // 赋以新值 swap() // 交换两个字符串的内容 s.clear() // 删除全部字符 ==,!=,<,<=,>,>=,compare() // 比较字符串 size(),length() // 返回字符数量,两者无区别 s.empty() // 判断字符串是否为空 reserve() // 保留一定量内存以容纳一定数量的字符 s.capacity() // 返回重新分配之前的字符容量 copy() // 将某值赋值为一个C_string data() // 将内容以字符数组形式返回,类型为const char *(在c++11后,等同于c_str())
参考:
(1)https://www.baidu.com/link?url=SRFB1_BmZd74MUesBaVFHXvhVMfsO1IRZakze46h4BpavsOYZ5mh_rDQ-sWmgvoQmI_BdCdki9gSLS2EwUVict1hYpxZZGgFQS_YCxdHpiq&wd=&eqid=b48ebd1500151879000000035ff008ef
(2)https://www.cnblogs.com/maluning/p/8556862.html