news 2026/6/22 20:18:27

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/23 17:34:55

详细分析一下 国富论里里面 十一章 论 地租

《国富论》第十一章《论地租》&#xff08;Of the Rent of Land&#xff09;是亚当斯密对土地收入性质的系统性分析&#xff0c;属于其分配理论的重要组成部分。本章在斯密的理论体系中具有承上启下的作用&#xff0c;既延续了对生产要素报酬&#xff08;工资、利润、地租&…

作者头像 李华
网站建设 2026/6/23 17:37:36

现在 夸脱小麦 多少 盎司白银

根据当前的国际市场价格数据&#xff0c;1夸脱小麦约相当于0.24盎司白银。这个比例与您在《国富论》中读到的历史数据&#xff08;如14世纪约4盎司白银/夸脱&#xff09;相比&#xff0c;已经发生了巨大变化。下面是根据最新市场数据进行的计算和对比分析&#xff1a;&#x1f…

作者头像 李华
网站建设 2026/6/22 20:21:01

Java Web html 图书管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展&#xff0c;图书管理系统在图书馆、学校及企业中的应用日益广泛&#xff0c;传统的手工管理模式已无法满足高效、精准的管理需求。数字化图书管理系统能够实现图书信息的快速检索、借阅记录的自动化管理以及用户权限的精细化控制&#xff0c;极大地…

作者头像 李华
网站建设 2026/6/23 17:30:26

半光滑牛顿法非线性优化带35个测试函数 半光滑牛顿法求解非线性目标函数约束优化问题的MATLA...

半光滑牛顿法非线性优化带35个测试函数 半光滑牛顿法求解非线性目标函数约束优化问题的MATLAB自编源代码&#xff0c;不调用MATLAB优化库函数&#xff0c;每个函数开头有简单英语注释&#xff0c;求解速度比MATLAB自带优化库函数快。 目标函数支持非线性目标函数、二次型函数等…

作者头像 李华
网站建设 2026/6/22 23:09:42

C 标准库 - `<math.h>`

C 标准库 - <math.h> 引言 在 C 语言编程中,数学运算是一项基本且重要的操作。《math.h》头文件提供了丰富的数学函数,用于处理各种数学问题。本文将详细介绍 <math.h> 标准库中的函数、使用方法以及注意事项。 1. <math.h> 函数概述 <math.h> 头…

作者头像 李华