STL容器——String容器
2026/6/1 22:09:12 网站建设 项目流程

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:灵活的运用求子串功能,可以在实际开发中获取有效的信息,在上述代码中就可以有效获取到不同邮箱中的用户名。**

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询