news 2026/6/9 23:31:13

STL容器——String容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STL容器——String容器

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:灵活的运用求子串功能,可以在实际开发中获取有效的信息,在上述代码中就可以有效获取到不同邮箱中的用户名。**
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 12:49:17

9、网络安全配置与主动防御策略

网络安全配置与主动防御策略 在网络安全配置中,桥接设置和防火墙规则的配置是至关重要的环节。以下将详细介绍桥接配置、防火墙规则设置以及应对常见网络威胁的策略。 桥接配置步骤 在进行桥接配置前,需要使用 ifconfig 命令检查预期的成员接口(如 ep0 和 ep1 )是否…

作者头像 李华
网站建设 2026/6/10 15:29:01

11、主动防御与网络流量管理策略

主动防御与网络流量管理策略 在网络安全和流量管理领域,有许多实用的技术和策略可以帮助我们更好地保护网络和优化资源利用。下面将介绍一些关键的技术,包括邮件垃圾检测、白名单处理以及网络流量整形等方面的内容。 1. 检测无序 MX 使用 在邮件安全方面,OpenBSD 4.1 引入…

作者头像 李华
网站建设 2026/6/10 14:47:46

前后端分离BS模式冷链物流系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 冷链物流系统在保障食品、医药等温敏产品品质和安全方面具有重要作用。传统冷链物流系统多采用单体架构&#xff0c;存在前后端耦合度高、扩展性差、维护成本高等问题。随着互联网技术的发展&#xff0c;企业对物流系统的实时监控、数据分析和智能化管理需求日益增长。基于…

作者头像 李华
网站建设 2026/6/8 11:51:00

仅限内部分享:头部企业使用的云边Agent任务调度模型曝光

第一章&#xff1a;云边协同 Agent 任务分配的背景与意义随着物联网、5G 和边缘计算技术的快速发展&#xff0c;海量设备产生的数据需要在靠近数据源的边缘节点进行实时处理。传统的集中式云计算模式在应对低延迟、高并发的场景时面临带宽瓶颈和响应延迟的挑战。云边协同通过将…

作者头像 李华
网站建设 2026/6/10 13:26:27

综合IDC、Gartner视角:2025年值得关注的五大Agentic BI厂商推荐榜单

“智能体&#xff08;Agent&#xff09;是数据分析的‘自动驾驶模式’。”业内专家的这个比喻精准描绘了Agentic BI的核心价值——系统能够理解业务问题、自动分解任务、调用工具并给出结论&#xff0c;而不仅仅是呈现数据。随着IDC《中国GenBI厂商技术能力评估&#xff0c;202…

作者头像 李华