当前位置: 首页 > news >正文

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

相关文章:

  • Mal-PEG4-NHS ester,化学特性及其在蛋白质修饰与生物分子功能化研究中的应用
  • 详细分析一下 国富论里里面 十一章 论 地租
  • 现在 夸脱小麦 多少 盎司白银
  • Java Web html 图书管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 半光滑牛顿法非线性优化带35个测试函数 半光滑牛顿法求解非线性目标函数约束优化问题的MATLA...
  • C 标准库 - `<math.h>`
  • 【AUTOSAR AP CorAUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型
  • 舔狗的情绪价值和演员的自我修养
  • 30、编程与脚本编写指南
  • 33、Shell脚本中的控制操作符与交互式输入技巧
  • vue和springboot框架开发的协同过滤算法的电影推荐系统 电影评价管理系统_ 影评解说系统z9p6gctw
  • vscode 连接失败
  • 【Linux系统】初探虚拟地址空间
  • vue和springboot框架开发的小程序 健身服务与轻食间平台系统健身减肥系统_xj840td0
  • vue和springboot框架开发的小程序儿童疫苗接种预约医疗提醒系统_5dq9226p
  • 【记录】Rust|Rust开发相关的7个VSCode插件的介绍和推荐指数(2025年)
  • C++小程序编写系列(2)
  • python-flask-django公司企业员工出差报销管理系统_04446nsn
  • Glyph2D 同一个图形根据点云的输入产生不同位置的输出
  • Lombok 注解:简化 Java 代码
  • 别让大数据“全表扫描”掏空你:数据分区策略与分区裁剪的实战心经
  • (转载)真正的缘分,“推背感”都跟强
  • Hadoop生态下的数据预处理:MapReduce实战案例解析
  • 2025 年 CTF 零基础入门全攻略!新手必藏!这种实战网络对抗机会千万别错过!
  • 新手也能轻松建站!VanBlog+cpolar让博客创作和分享更简单
  • vue导出excel文件
  • 基于STM32的自动售货机控制系统设计
  • 液压挖掘机回转能量回收系统设计与仿真
  • android 媒体之 MediaSession
  • 校园网络规划