(C++)string类及其函数

 愿所有美好如期而遇


标准库中的string类

string是对类模板实例化出的类型的重命名,也就是说string就是basic_string<char>这个类型。

string是表示字符串的字符串类

该类接口与常规类的接口基本相同,再添加了一些专门用来操作string的常规操作。

在使用string类时,需要使用using namespace std,或者部分展开。而且我们最好包含<string>的头文件,不是每个编译器都在<iostream>里包含了<string>的声明。(尽管我的编译器实现了)

string类的常用接口

string()                               无参构造,结果就是空字符串

string(const char* s)        用常量字符串构造

string(const string& s)     拷贝构造

string(size_t  n,char ch)   用n个字符ch构造

 

string类对象的容量操作

size/length  返回字符串的有效长度,\0是标识符,不属于有效字符

empty          检测字符串是否位空串,是返回true,否返回false

clear            清空字符串有效字符  

string类对象的访问以及遍历操作

operator[]      运算符重载

begin+end    begin获取第一个字符的迭代器,end获取最后一个有效字符的下一个位置的迭代器。

#include <iostream>
#include <string>
using namespace std;

int main()
{

	string s("I love you");

	for (int i = 0; i < s.size(); i++)
	{
		cout << s[i];
	}
	cout << endl;

	//底层是迭代器
	for (auto e : s)
	{
		cout << e;
	}
	cout << endl;

	string::iterator sit = s.begin();
	while (sit != s.end())
	{
		cout << *sit++;
	}
	cout << endl;

	return 0;
}

 

四个迭代器

iterator                              

const_terator

reverse_iterator

const_reverse_iterator

#include <iostream>
using namespace std;

int main()
{
	//iterator
	string s1("ai");

	string::iterator it1 = s1.begin();
	while (it1 != s1.end())
	{
		cout << *it1++;
	}
	cout << endl;

	//const iterator
	const string s2("const ai");

	string::const_iterator it2 = s2.begin();
	while (it2 != s2.end())
	{
		cout << *it2++;
	}
	cout << endl;

	//reverse iterator
	string s3("I love you");

	string::reverse_iterator it3 = s3.rbegin();
	while (it3 != s3.rend())
	{
		cout << *it3++;
	}
	cout << endl;

	//const_reverse_iterator
	string s4("hope");

	string::const_reverse_iterator it4 = s4.rbegin();
	while(it4 != s4.rend())
	{
		cout << *it4++;
	}
	cout << endl;

	return 0;
}

插入和删除

insert 可以从任意位置插入字符或者字符串

earse  可以从任意位置删除字符或者字符串

int main()
{

	string s = "haha";

	s.insert(0, "hello ");
	cout << s << endl;
	s.insert(0, 1, '?');
	cout << s << endl;
	s.insert(s.size(), 1, '?');
	cout << s << endl;

	string s1;
	s1.resize(16,'?');
	s.insert(s.size() / 2, s1);
	cout << s << endl;

	//迭代器
	s.insert(s.begin(), 'h');
	s.insert(s.begin(), '?');
	cout << s << endl;

	return 0;
}

int main()
{

	string s = "abcdefghijklmnopqrstuvwxyz";
	cout << s << endl;

	//从0位置开始删除1个字符
	s.erase(0, 1);
	cout << s << endl;

	//删除区间字符
	s.erase(s.end() - 3,s.end());
	cout << s << endl;

	//删除单个字符
	s.erase(s.end() - 3);
	cout << s << endl;

	//缺省,全部删除
	s.erase(0);
	cout << s << "NULL" << endl;

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试系列之 —— 前端交互测试和后端逻辑测试

01 前端交互测试 前端页面与后端代码之间的交互测试&#xff0c;可以理解为接口功能测试的一个子集。 测试准备 在进行交互测试前&#xff0c;首先要对前端功能有明确的认知&#xff0c;能够明确区分&#xff1a; 什么功能属于前端页面逻辑功能 什么功能又属于前端与后…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…

Docker与Kubernetes结合的难题与技术解决方案

文章目录 1. **版本兼容性**技术解决方案 2. **网络通信**技术解决方案 3. **存储卷的管理**技术解决方案 4. **安全性**技术解决方案 5. **监控和日志**技术解决方案 6. **扩展性与自动化**技术解决方案 7. **多集群管理**技术解决方案 结语 &#x1f388;个人主页&#xff1a…

SpringCloud微服务:Nacos和Eureka的区别

目录 配置&#xff1a; 区别&#xff1a; ephemeral设置为true时 ephemeral设置为false时&#xff08;这里我使用的服务是order-service&#xff09; 1. Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 2. Nacos与Eu…

腾讯云便宜服务器有哪些?腾讯云这个服务器一个月7块钱!

大家好&#xff0c;今天我们来一起探讨一下腾讯云便宜服务器的相关问题。相信很多人在寻找可靠的云服务器时都会关注价格&#xff0c;而腾讯云作为国内领先的云计算平台&#xff0c;其价格优惠的服务器产品也是备受关注。那么&#xff0c;腾讯云便宜服务器有哪些呢&#xff1f;…

新手必看!!STM32定时器简介

一、定时器有哪些&#xff1f; 定时器分为三大类&#xff1a;基本定时器、通用定时器和高级定时器。 二、每个定时器的功能以及使用场景 1. 基本定时器&#xff08;Basic Timers&#xff09;&#xff1a; 功能&#xff1a; 基本定时器具有较为简单的功能&#xff0c;通常用于…

“CGT Awards”2024年度亚太区细胞与基因治疗行业之星奖项评选火热申报中

细胞与基因治疗近年来得到国内国际的广泛关注&#xff0c;大批科研单位和企业投入到这个领域的研发当中。到2023年底&#xff0c;12余种新型CGT 疗法有望在美国、欧洲或两地同时获批上市。近5年期间&#xff08;2018-2022&#xff09;&#xff0c;各地域CGT 疗法的临床试验占比…

【数据结构与算法】JavaScript实现树结构(一)

文章目录 一、树结构简介1.1.简单了解树结构1.2.树结构的表示方式 二、二叉树2.1.二叉树简介2.2.特殊的二叉树2.3.二叉树的数据存储 三、二叉搜索树3.1.认识二叉搜索树3.2.二叉搜索树应用举例 一、树结构简介 1.1.简单了解树结构 什么是树&#xff1f; 真实的树&#xff1a;…

信息安全相关标准

GB/T 25070-2019 信息安全技术 网络安全等级保护安全设计技术要求 在线预览|GB/T 25070-2019 (gb688.cn) 每一级安全保护环境分为安全计算环境&#xff0c;安全区域边界&#xff0c;安全通信网络。 一级通用安全计算环境 二级通用安全 计算环境 三级 通用安全计算环境 第四级…

linux环境下软件安装之Mysql8

1、官网下载(右键最后一页的超链接) 2、通过命令行下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz3、解压 1.将.xz解压为.tar xz -d mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz2.将.tar解压为普通文件 tar -xv…

测试人员如何提交一条高质量的bug

测试人员在测试软件过程中&#xff0c;发现bug是必然的&#xff0c;那么发现bug后就要提交bug到缺陷管理系统中&#xff0c;如何提交一条高质量的bug&#xff0c;是每一个测试人员值得深思的问题&#xff0c;如果bug提交的不规范&#xff0c;不准确会导致开发人员理解错误&…

Rxswift(1)

基础用法 数据绑定核心Observerable 可监听序列 数据绑定 平常的写法 let image: UIImage UIImage(named: ...) imageView.image image绑定的写法 //可监听序列 let image: Observable<UIImage> ... //imageView.rx.image 观察者 image.bind(to: imageView.rx.image…

你知道什么是Oracle嘛

文章目录 Oracle数据简介环境准备安装配置安装Oracle设置Oracle开机自启Oracle核心概念创建用户修改用户密码用户授权查看用户 数据备份总结 Oracle数据简介 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它…

122.Android 简单的历史搜索

第一步 FlowLayout&#xff1a; public class FlowLayout extends ViewGroup {private int mHorizontalSpacing dp2px(16); //每个item横向间距private int mVerticalSpacing dp2px(8); //每个item横向间距private List<List<View>> allLines new ArrayList<…

linux:删除乱码文件、目录

由于编码原因&#xff0c;在linux服务器上上传、创建中文文件或目录时&#xff0c;会产生乱码&#xff0c;如果想删除它&#xff0c;发现用rm命令是删除不了的&#xff0c;这种情况下&#xff0c;用find命令可以删除乱码的文件或目录。 首先进入乱码文件或目录所在的目录&…

服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台服务器上有一组raid5阵列&#xff0c;该raid5阵列有15块成员盘。上层是一个xfs裸分区&#xff0c;起始位置是0扇区。 服务器故障&检测&#xff1a; 服务器raid5阵列中有硬盘性能表现不稳定&#xff0c;但是由于管理员长时间没有关…

1.数字化转型概述

中台数字化转型的问题 在中台数字化转型过程中&#xff0c;如何进行业务领域边界划分&#xff0c;如何完成中台领域建模实现能力复用&#xff0c;如何完成单体应用拆分利微服务设计&#xff0c;如何实现前中后台的协同设计; DDD解决的问题 DDD首先从业务领域人手&#xff0c…

上机练习 8: DataFrame 综合练习

记录一下做的练习题 目录 1)自定义一个 Series 并命名为 s1&#xff0c;自定义索引值&#xff0c;采用随机数作为其中数据尝试使用 s1.sum(计算其中所有数据的和,使用 s.mean(计算其中所有数据的平均值。 2)创建一个形状为4*6的 DataFrame 并命名为 df1,并指定行索引为[“a”…

Linux服务器安装Dotnet8

1. 下载dotnet8 sdk 下载 .NET 8.0 SDK (v8.0.100) - Linux x64 Binaries 拿到 dotnet-sdk-8.0.100-linux-x64.tar.gz 文件 2. 把文件上传到 /usr/local/software 目录 mkdir -p /usr/local/software/dotnet8 把文件拷贝过去 mv dotnet-sdk-8.0.100-linux-x64.tar.gz /usr/loc…

Python 如何实现 Mediator 中介者设计模式?什么是中介者设计模式?Python 设计模式示例代码

什么是中介者设计模式&#xff1f; 中介者&#xff08;Mediator&#xff09;设计模式是一种行为型设计模式&#xff0c;其主要目的是通过将对象之间的直接交互转变为通过中介者对象进行的间接交互&#xff0c;从而减少对象之间的耦合度。中介者模式通过集中控制对象之间的通信…
最新文章