c++STL系列之String
开头总结:
C++中STL的概念总结:
1、容器
2、迭代器
STL中所有的不同库都是容器的概念体现,基本操作都是基于迭代器的操作。
一、string
string 其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等。下图是字符串在内存中的存储方式,所以对于string类型,依旧可以使用下标来操作。
二、string常用方法
//头文件 #include<string> //声明 string str = “abc”; //str的长度,结果为:3 str.length(); str.size(); //得到str的头字符,输出为:a str.front(); //得到str的尾字符,输出为:c str.back(); //得到str的第i位置的字符 str.at(i); str[i];//两种方法都可以,第一种方法在字符不存在时不会报错
三、高阶用法
字符串的拼接:
string str = "abc"; //str添加,该方法只能添加一个字符 str.push_back('d');//str = "abcd" //str拼接也可以使用 + 操作符 string str1 = "ef"; str += str1;//str = "abcdef" //str拼接也可以使用 append() 函数,将str1添加到str后 str.append(str1); //append() 函数,也可以指定将str2指定部分添加到str后 string str2 = "qwertyu"; //将str2的下标1-4位置添加到str后 str.append(str2,1,4);//str = "abcdefwert",str = "abcdef"
切割字符串:
//切割字符串 string str11 = "abcdefg"; //,第一个参数为位置,第二个参数为长度,保留位置0后面的三个字符 str11 = str11.substr(0,3);
翻转字符串:
string s1 = "abc"; //翻转字符串 reverse(s1.begin(),s1.end());//开始位置,结束位置
字符串的替换:
string str2 = "qwertyu"; //将str2替换为str str.assign(str2);//此时str的值为str2的字符串 str.assign(str2,4,2);//将str2的下标4后的2个字符替换str
字符串的插入:
//插入 str.insert(pos,value) str.insert(1,"sss");//在str下标1的位置插入“sss"
字符串的删除:
//erase()删除操作 string str ("This is an example phrase."); string::iterator it; // 第(1)种用法 str.erase (10,8); cout << str << endl; // "This is an phrase." // 第(2)种用法,删除一个字符 it=str.begin()+9; str.erase (it); cout << str << endl; // "This is a phrase." // 第(3)种用法,删除区间 str.erase (str.begin()+5, str.end()-7); cout << str << endl; // "This phrase."
字符串的查找:string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。
//find()查找 string str = "tsssy"; int p = str.find('s',0);//第二个参数为起始查找位置,省略默认从0开始 string::size_type po = str.find("s");//p和pp都为记录查找位置 if (p != str.npos) { cout<<p<<endl;//如果找到则返回索引位置,结果为:1 } else cout<<"没有找到"<<endl; //子串出现在母串中的首次出现的位置 int p_first = str.find_first_of("s"); cout<<p_first<<endl;//结果为:1 //子串出现在母串中的末次出现的位置 int p_last = str.find_last_of("s"); cout<<p_last<<endl;//结果为:3 //查找子串与母串均不相同的首个位置 int p_first_no = str.find_first_not_of("tf"); cout<<p_first_no<<endl;//结果为:1 //查找子串与母串均不相同的末个位置 int p_last_no = str.find_last_not_of("ey"); cout<<p_last_no<<endl;//结果为:3
字符串的比较compare():
//比较 string a = "asdf"; string b = "qwer"; string c = "sdf"; // 1.直接比较两个字符串,返回0则表示两个字符串相同 int number = a.compare(b); //结果为 number=-1; int number1 = b.compare(b); //结果为 number=0; int number2 = a.compare("asdf"); //结果为 number=0; // 2.一个字符串的子串与另一个字符串比较 int number3 = a.compare(1,3,c); //用a[1:3]和c相比,结果为 number=0; //字符串b从下标为1的字符开始的三个字符与字符串d比较,显然都是fgh,所以相等,返回0 int number4 = b.compare(1,3,c); //结果为 number=1; int number5 = a.compare(1,3,"sdf"); //结果为 number=0; // 3.一个字符串的子串与另一个字符串的子串比较 int number6 = a.compare(1,3,c,0,2); //结果为 number= 0; //字符串a从下标为1的地方开始的后3个字符是sdf,字符串c从下标为0的字符开始的后三个字符是sdf,所以相等
str.c_str():