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():
浙公网安备 33010602011771号