STL容器——String容器
基本概念
string是c++风格的字符串,不同于c语言的char*,本质是一个类
char*是一个指针,string是一个类,内部封装了char *来管理字符串,是一个char&型的容器
特点:内部封装了查找find,拷贝copy,删除delete,替换repalce,插入insert
string构造函数
四种函数原型
- string()创建一个空的字符串
- string(const char* s)使用字符串s初始化
- string(const string& str)使用一个string对象初始化另一个string对象
- string(int n,char c)使用n个字符c初始化
voidtest1(){string s1;constchar*str="叶落 秋白";strings2(str);//使用字符串s初始化cout<<"s2: "<<s2<<endl;strings3(s2);//使用一个string对象初始化另一个string对象strings4(10,'w');cout<<"s4 = "<<s4<<endl;}string赋值操作
赋值的函数原型:
string& operator = (const char* s) //char类型字符串 赋值给当前的字符串
string& operator = (const string &s) //把字符串s赋给当前的字符串
string& operator = (char c) //把字符赋值给当前的字符串
string& assign(const char s) //把字符串s赋值给当前的字符串
string& assign(const char*s,int n) //把字符串s的当前n个字符赋给当前的字符串
string& assign(const string &s) //把字符串s赋给当前字符串
string& assign(int n,char c) //用n个字符c赋给当前字符串
voidtest2(){string str1;str1="叶落秋白";cout<<"str1="<<str1<<endl;string str2;str2=str1;cout<<"str2="<<str2<<endl;string str3;str3='c';cout<<"str3="<<str3<<endl;string str4;str4.assign("hello c++");cout<<"str4="<<str4<<endl;string str5;str5.assign("hello c#",5);cout<<"str5="<<str5<<endl;string str6;str6.assign(str5);cout<<"str6="<<str6<<endl;string str7;str7.assign(6,'w');cout<<"str7="<<str7<<endl;}string拼接操作
在末尾拼接字符串
函数原型:
string& operator+=(const char* str) 重载+=操作符
string& operator+=(const char c) 重载+=操作符
string& operator+=(const string& str) 重载+=操作符
string& append(const char* s) 把字符串s连接到当前字符串结尾
string& append(const char* s,int n) 把字符串s的前n个字符连接到当前字符串的结尾
string& append(const string &s) 同operator+=(const string& str)
string& append(const string &s,int pos,int n) 把字符串s中从pos开始的n个字符连接到字符串结尾
voidtest3(){string str1="红豆";str1+="忆相思";cout<<"str1="<<str1<<endl;str1+='?';cout<<"str1="<<str1<<endl;string str2="yyds";str1+=str2;cout<<"str1="<<str1<<endl;string str3="You";str3.append("low");cout<<"str3="<<str3<<endl;str3.append("wuwuwu qaq",4);cout<<"str3="<<str3<<endl;str3.append(str2);cout<<"str3="<<str3<<endl;str3.append(str2,0,1);cout<<"str3="<<str3<<endl;}初学者只需要稍微记几个拼接函数即可
string查找替换
函数原型:
查找s第一次出现位置,从pos开始查找
int find(const string& str, int pos = 0) const; int find(const char* s , int pos ==0) const;从pos位置查找s的前n个字符第一次位置
int find( const char* s, int pos, int n) const;查找字符c第一次出现位置
int find(const char c, int pos = e) const;查找str最后一次位置,从pos开始查找
int rfind(const string& str, int pos = npos) const;查找str最后一次位置,从pos开始查找,计数永远是从前往后
int rfind(const char* s, int pos = npos) const;从pos查找s的前n个字符最后一次位置
int rfind(const char* s, int pos, int n) const;查找字符c最后一次出现位置
int rfind(const char c, int pos - e) const;替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const string& str);替换从pos开始的n个字符为字符串s
string& replace(int pos, int n,const char* s );示例
voidtest4(){string str1="abcdefgh";//找到返回下标,找不到返回-1intpos1=str1.find("def");cout<<"pos1="<<pos1<<endl;intpos2=str1.find("s");cout<<"pos2="<<pos2<<endl;pos1=str1.rfind("ab");//从右往左找到第一个出现,从左往右计数cout<<"pos1="<<pos1<<endl;;}//替换voidtest5(){string str2="abcdef";str2.replace(1,2,"1111");//从1号位置起,2个字符替换为1111cout<<"str2="<<str2<<endl;}String字符串比较
函数原型:
- int compare(const string &s) const;
- int compare(const char* s) const;
使用示例:
string str1=“zello”;string str2=“hello”;if(str1.compare(str2)==0){cout<<“相等”<<endl;}elseif(str1.compare(str2)>0){cout<<“str1大”<<endl;}else{cout<<“str2大”<<endl;}String 字符的存取
string 中单个字符存取方式有两种:
char& operator[](int n);:通过[]方式取字符char& at(int n);:通过at方法获取字符
string str="Hello";for(inti=0;i<str.size();++i){cout<<str[i]<<" ";}for(inti=0;i<str.size();++i){cout<<str.at(i)<<" ";}- 修改单个字符:以下两种方法都可。
str[0]='W';str.at(1)='W';string插入和删除
函数原型:
string& insert(int pos,const cahr* s);//在n位置插入字符串
string& insert(int pos,const string& s);//在n位置插入字符串
string& insert(int pos,int n,char c);//在指定位置插入n个字符c
string& erase(int pos,int n = npos);//删除从pos位置开始的n个字符
string str=“hello”;//插入str.insert(1,“111”);cout<<"str = "<<str<<endl;//删除str.erase(1,3);cout<<"str = "<<str<<endl;string求子串
从字符串中得到想要的子串
函数原型:
string substr(int pos=0,int n=npos) const ;//返回由pos位置开始的由n个字符组成的字符串
//string求子串voidtest01(){string str="abcdef";string subStr=str.substr(1,3);cout<<"subStr="<<subStr<<endl;}//使用操作voidtest02(){string email="ylqb@qq.com";//从邮箱地址中获取用户名信息intpos=email.find("@");string usrName=email.substr(0,pos);cout<<usrName<<endl;}tips:灵活的运用求子串功能,可以在实际开发中获取有效的信息,在上述代码中就可以有效获取到不同邮箱中的用户名。
ring subStr = str.substr(1, 3);
cout << “subStr=” << subStr << endl;
}
//使用操作
void test02()
{
string email = “ylqb@qq.com”;
//从邮箱地址中获取用户名信息
int pos = email.find(“@”);
string usrName = email.substr(0, pos);
cout << usrName << endl;
}
**tips:灵活的运用求子串功能,可以在实际开发中获取有效的信息,在上述代码中就可以有效获取到不同邮箱中的用户名。**