C++string类的详细使用方法

news2025/1/16 20:55:36

String类的详细使用

文章目录

  • String类的详细使用
          • 初始化
          • 扩容空间
            • resize与reserve扩容
            • 长度获取
          • 插入与删除函数
            • 运算符插入
            • append插入
            • assign字符串截取
            • push_back尾插
            • erase删除
            • replase替换
            • swap交换
            • pop_back尾删
            • substr截断字符串
          • 功能
            • copy拷贝
            • find查找
            • rfind反向查找
            • find_first_of匹配查找查找
            • find_first_not_of不匹配查找
            • operator[ ] 和at访问
          • Iterator迭代器

初始化

C++风格

//初始化成字符串
string str("hello string");
cout << str << endl;

//初始化 10个,字符c
string str1(10,'c');
cout << str1 << endl;

//实例化-初始化
string str2(str1);
cout << str2 << endl;

//默认初始化,调用默认构造函数
string str4();

C语言风格

string str3 = "hello,string!!!";
cout << str3 << endl;
扩容空间
  1. str.clear()把字符全清了
  2. str.empty()判断str是否为空
  3. shrink_to_fit手动扩容
  4. capacity 容量大小
  5. max_size最大长度
resize与reserve扩容

在这里插入图片描述

在这里插入图片描述

容量会比自己扩容的大一些

区别就是resize会改变size 也会改变capacity ,reserve只改变capacity

长度获取
string str("hello string");
int len1 = str.size();
int len2 = str.length();
//包含\0
//   len1=12
//   len2=12
string str("hello string");
string str1 = "hello,string!!!";
str = str1;

// 输出
// hello,string!!!
插入与删除函数
运算符插入
string str("baby");
string str1 = "hello,string!!!";
string str2 = "xxxxxxx";
string str3 = str + str2;

//输出
//babyhello,string!!!


str += str2;
str += "abcdefg";
//输出
//babyxxxxxxxabcdefg
append插入
string& append (const string& str);	
string& append (const string& str, size_t subpos, size_t sublen);//(str,str下标位置,str下标后sublen个)
string& append (const char* s);
string& append (const char* s, size_t n);
string& append (size_t n, char c);
template <class InputIterator>
string& append (InputIterator first, InputIterator last);


//例:
string str("hello");
str.append("pangrams are cool", 10,2);//获取下标10,后两个字节
//输出:
// "hellore"



assign字符串截取
string& assign (const string& str);	
string& assign (const string& str, size_t subpos, size_t sublen);//str,str下标位置,截取str下标后sublen个
string& assign (const char* s);
string& assign (const char* s, size_t n);	
string& assign (size_t n, char c);	
template <class InputIterator>
string& assign (InputIterator first, InputIterator last);


//例:
string str;
str.assign("pangrams are cool", 10,2);
//输出:
// "re"


push_back尾插

只能插入字符


string str("hello");
str.push_back('3');
//输出
//hello3

string str("hello");
str.push_back('113');
//这里会用最后一个来作为尾插数据
//输出
//hello3

erase删除
string& erase (size_t pos = 0, size_t len = npos);//(起始下标,删除len个)
iterator erase (iterator p);	
iterator erase (iterator first, iterator last);

//举例
string str("hello");
str.erase(0,3);//0位置删除3个
//输出:
//lo


replase替换
string& replace (size_t pos,  size_t len,  const string& str);
string& replace (iterator i1, iterator i2, const string& str);
string& replace (size_t pos,  size_t len,  const string& str,size_t subpos, size_t sublen);//解释
string& replace (size_t pos,  size_t len,  const char* s);
string& replace (iterator i1, iterator i2, const char* s);
string& replace (size_t pos,  size_t len,  const char* s, size_t n);
string& replace (iterator i1, iterator i2, const char* s, size_t n);
string& replace (size_t pos,  size_t len,  size_t n, char c);
string& replace (iterator i1, iterator i2, size_t n, char c);
template <class InputIterator>
string& replace (iterator i1, iterator i2,InputIterator first, InputIterator last);


//举例
string str("hello");
string str1("xxxx");
str.replace(3, 2, str1, 2, 2);//在str中下标2后取2个字符,与str下标3位置后两个进行替换
//输出:
//helxx
swap交换
string str("hello");
string str1("string");
str.swap(str1);
//输出:
//str=string
//str1=hello

pop_back尾删
string str("hello");
str.pop_back();
//输出:
//hell
substr截断字符串
string str = "Hellostring";
str.substr() //Hellostring
str.substr(0, 3) //hel
str.substr(2, 20)//llostring
str.substr(20, 2) //抛异常
功能
  1. str.c_str()string转换尾c风格字符串,因为C中没有string
  2. data():与c_str()类似,但是返回的数组不以空字符终止
copy拷贝
size_t copy (char* s, size_t len, size_t pos = 0) const;
//(目标空间,拷贝长度,起始下标)不含\0

//举例 
char s[20];
string str("hello string!!!");
size_t length = str.copy(s, 6, 5);
s[length] = '\0';
//输出
//strin 
find查找

找到返回下标,找不到返回-1 下标往后找

size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;	
size_t find (char c, size_t pos = 0) const;

//举例
string str("hello string!!!");
size_t len=str.find("ell");
//输出:
//1

rfind反向查找

找到返回下标,找不到返回-1,从下标开始找,往前找

string str("hello string!!!");
size_t len=str.rfind("!",3);  
//返回-1
find_first_of匹配查找查找
size_t find_first_of (const string& str, size_t pos = 0) const;
size_t find_first_of (const char* s, size_t pos = 0) const;	
size_t find_first_of (const char* s, size_t pos, size_t n) const;
size_t find_first_of (char c, size_t pos = 0) const;

//举例
string str("Please, replace");
size_t found = str.find_first_of("aeiou");
while (found != string::npos)//npos=-1,无符号最大值
{
	str[found] = '*';
	found = str.find_first_of("aeiou", found + 1);
}
//输出:
//Pl**s*, r*pl*c*

find_last_of反向匹配查找

find_first_not_of不匹配查找

如果不匹配就输出

string str("Please, replace");
size_t found = str.find_first_not_of("aeiou");
while (found != string::npos)
{
	cout  << str[found];
	found = str.find_first_not_of("aeiou",found+1);
		
}
//输出:
//Pls, rplc

find_last_not_of反向不匹配查找

operator[ ] 和at访问
string str("hello string");
count<<str[2]<<endl;
count<<str.at(2)<<endl;
Iterator迭代器

begin开始

end结束

迭代器的使用

iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;


//举例
string str = "We think in generalities, but we live in details.";
string::iterator it = str.begin();
while (it != str.end())
{
	cout << *it;
	it++;
}
//输出:We think in generalities, but we live in details.

反向迭代器

reverse_iterator rbegin();
const_reverse_iterator rbegin() const
reverse_iterator rend();
const_reverse_iterator rend() const

    
    
//举例
string str = "We think in generalities, but we live in details.";
string::reverse_iterator rit = str.rbegin();
while (rit != str.rend())
{
	cout << *rit;
	rit++;
}
//输出:.sliated ni evil ew tub ,seitilareneg ni kniht eW

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三路快排(基于三指针单趟排序的快速排序)+快排时间复杂度再分析

目录 一.前言 二. 三路快排 &#x1f60d;算法思想: &#x1f60d;算法实现步骤: &#x1f60d;三指针单趟排序的实现:​ &#x1f60d;非递归快排完全体: &#x1f914;与C标准库里的快排进行对比测试: 三.快排时间复杂度再分析 一.前言 http://t.csdn.cn/mz8dghttp://…

SolidWorks2020安装教程

破解文件及步骤 和 安装包 hf&#xff1a;SolidWorks2020 即可 &#xff08;我的推广 共中号&#xff09; Before installation, block the outgoing Internet access by means of Windows Firewall or cord plug. Check .NET Framework 3.5 and 4.0 are installed. If .NET …

Hive安装与操作

目录 环境 数据 实验步骤与结果 &#xff08;1&#xff09;环境启动 &#xff08;2&#xff09;Hive基本操作 环境 Hadoop集群开发环境、mysql、Hive环境 数据 course.txt、sc.txt、student.txt 实验步骤与结果 &#xff08;1&#xff09;环境启动 ①执行命令&#xf…

JVM的内存结构(超详细附加大厂面试题)

内存结构 1、什么是 JVM &#xff1f; 1&#xff09;定义 Java Virtual Machine &#xff0c;Java 程序的运行环境&#xff08;Java 二进制字节码的运行环境&#xff09;。 2&#xff09;好处 一次编译&#xff0c;处处执行 自动的内存管理&#xff0c;垃圾回收机制 数组下…

结构重参数化宇宙(Re-parameterization Universe)

文章目录0. 前言1. Re-parameterization Universe1.1 RepVGG1.2. RepOptimizer2. 应用参考资料0. 前言 一方面&#xff0c;大量研究表明&#xff0c;多分支网络架构的性能普遍优于单分支架构&#xff1b;另一方面&#xff0c;相比多分支架构&#xff0c;单分支架构更有利于部署…

windows系统管理_windows server 2016 用户管理

用户账户的概述 **计算机用户账户&#xff1a;**由将用户定义到某一系统的所有信息组成的记录,账户为用户或计算机提供安 全凭证&#xff0c;包括用户名和用户登陆所需要的密码&#xff0c;以及用户使用以便用户和计算机能够登录到网络并 访问域资源的权利和权限。不同的身份拥…

自动控制原理模拟卷2

自动控制原理模拟题二 Question1 电炉温度控制系统原理如下图所示,分析系统保持电炉温度恒定的工作过程,指出系统的被控对象、被控量及各部件的作用,并画出系统方块图。 解: 电炉使用电阻丝加热,并要求保持炉温恒定,图中采用热电偶来测量电炉温并将其转换为电压信号,将…

Android 新版 Logcat 操作小技巧

新版的Android Studio中启用了新的 Logcat&#xff0c;有些小技巧这里介绍一下&#xff1a; 文章目录1. Logcat启动2. Logcat 搜索1. 搜索当前包名下的日志&#xff1a;2. 添加日志级别3. 添加标签4. 标签字段5. 排除字段6. 使用正则表达式7. 使用正则表达式排除8. 使用age截取…

初识C语言 ——“C Primer Plus”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是读一本好书&#xff0c;这一本书的名字就叫做《C Primer Plus》&#xff0c;那么&#xff0c;又回到了我们的初识C语言阶段啦&#xff0c;保证零基础都能看懂噢&#xff0c;下面&#xff0c;让我们进入C语言的…

app抓包实战

文章目录一、抓包原理二、常用应用场景三、过滤四、重发五、修改请求六、断点&#xff08;BreakPoint&#xff09;一、抓包原理 二、常用应用场景 解决移动端接口测试 解决接口测试过程中检查传参错误问题 mock测试&#xff08;虚拟的对象代替正常的数据、后端接口没有开发完成…

XXL-JOB分布式任务调度平台搭建以及和SpringBoot整合应用

1 前言 XXL-JOB 是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 可以前往 Gitee 地址进行下载使用&#xff1a; https://gitee.com/xuxueli0323/xxl-job.g…

计算机网络考试复习——第三章 3.1 3.2

本章考试范围为3.1 3.2 3.3 3.4 首先明确数据链路层在网络中是在物理层的上面从下网上看是在第二层&#xff0c;在数据链路层传输的单位是帧。 网络中的主机、路由器等都必须实现数据链路层&#xff0c;局域网中的主机、交换机等都必须实现数据链路层。 数据链路层的地位&am…

Win10 下编译 OpenCV 4.7.0详细全过程,包含xfeatures2d

在Win10下编译 OpenCV 4.7.0过程中&#xff0c;踩了几个坑&#xff0c;这里记录下来&#xff0c;供大家参考。 1. 下载源文件 GitHub上下载OpenCV 4.7.0源文件&#xff0c;及opencv_contrib-4.7.0&#xff0c;如果不方便下载&#xff0c;以下是百度网盘链接&#xff0c;有需要…

maven将jar包添加到本地仓库

第一步&#xff1a;下载需要添加的jar包 可以在maven库中查找下载&#xff0c;也可以在对应官网下载 maven库网址&#xff1a;https://mvnrepository.com/ 找到对应版本的jar包下载 第二步&#xff1a;将下载的jar包放到指定位置&#xff08;位置自己指定&#xff09;&#xf…

Spring的核心与设计思想

目录 IoC 传统程序开发思想 传统程序开发的缺陷 控制反转式程序开发 对比总结 理解Spring IoC DI 总结 我们通常所说的Spring指的是Spring Framework(Spring 框架),它是一个开源的框架,有着活跃而庞大的社区,Spring支持广泛的应用场景,可以让Java企业级的应用程序开发…

改进蚁狮优化算法

目录 ​1 主要内容 2 部分程序 3 程序结果 4 程序链接 ​1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型&#xff0c;即原始ALO算法的基础上添加了两种改进策略&#xff1a; - 改进1&#xff1a;将原先的间断性边界收缩因子变为连…

SpringAop 源码解析 (二) - 代理对象的创建以及执行过程

一、SpringAop 代理创建 以及 执行过程 在上篇文章中分析得出在使用 Aop 时&#xff0c;实际向 Spring 容器中注入了一个 AnnotationAwareAspectJAutoProxyCreator 动态代理 bean 生成处理器&#xff0c;该类有实现 BeanPostProcessor 扩展方法&#xff0c;并且在 postProcess…

文心一言 VS chatgpt (7)-- 算法导论2.3 3~4题

三、使用数学归纳法证明:当n刚好是2的幂时&#xff0c;以下递归式的解是 T(n)nlgn。若n2&#xff0c;T(n)2&#xff1b;若n2^k,k>1&#xff0c;T(n)2T(n/2)n。 文心一言&#xff1a; chatgpt&#xff1a; 首先&#xff0c;当 n2 时&#xff0c;T(n)2log₂n2&#xff0c;显…

结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)

我们知道&#xff0c;C语言是允许我们自己来创造类型的&#xff0c;这些类型就叫做——自定义类型。 自定义类型又包括结构体类型&#xff0c;联合体类型还有枚举类型。 今天的文章&#xff0c;我们就着重讲解这其中的结构体类型。 目录 结构体的声明 1.1结构的基础知识 …

托福高频真词List01//附阅读真题

once in a whileoccasionally adv 偶尔 &#x1f36e;segregateseparateV.隔离&#x1f36e;leftover remainingadj.剩余的 rivalcompetitor rivalcompete n.对手 v.对抗 apparentlyseeminglyadv.显然 &#x1f36e;unrivaledunequaledadj.无与伦比的 &#x1f36e;&#x…