C++入门 string常用接口(下)

目录

string类的常用接口说明

string类对象的修改操作(修饰符)

operator+= & append & push_back

assign & insert

erase & replace

swap & pop_back

string类对象的非成员函数

 operator+

relational operators(关系运算符)

getline

to_string & stoi

取域名使用实践


string类的常用接口说明

注:需要详细了解各接口使用方法,请访问网站:cplusplus.com - The C++ Resources Network

string类对象的修改操作(修饰符)

operator+= & append & push_back

void test_string19()
{
	string s1("hello world");
	cout << s1 << endl;

	// 尾插一个x
	s1.push_back('x');
	cout << s1 << endl;
	// 输出 hello worldx

	//在字符串后追加一个字符串
	s1.append(" yyyyyy!!");
	cout << s1 << endl;
	// 输出 hello worldx yyyyyy!!

	string s2("111111");

	//在字符串后追加字符串str
	s1 += 'y';
	s1 += "zzzzzzzz";
	s1 += s2;
	cout << s1 << endl;
	// 输出 hello worldx yyyyyy!!yzzzzzzzz111111
}

 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般 情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串

assign & insert

void test_string20()
{
	string s1("hello world");
	cout << s1 << endl;

	//为字符串分配一个新值,替换其当前内容
	s1.assign("111111");
	cout << s1 << endl;
	// 输出111111

	// 慎用,效率不高 -> O(N)
	// 实践中需求也不高
	string s2("hello world");
	s2.insert(0, "xxxx");
	cout << s2 << endl;
	// 输出 xxxxhello world

	char ch = 'y';
	cin >> ch;// 输入 kvl
	s2.insert(0, 1, ch);
	cout << s2 << endl;
	// 输出 kxxxxhello world

	s2.insert(s2.begin(), 'y');
	cout << s2 << endl;
	// 输出 ykxxxxhello world

	s2.insert(s2.begin(), s1.begin(), s1.end());
	cout << s2 << endl; 
	// 输出 111111ykxxxxhello world
}

erase & replace

void test_string21()
{
	string s1("hello world");
	cout << s1 << endl;

	// erase效率不高,慎用,和insert类似,要挪动数据
	s1.erase(0, 1);
	cout << s1 << endl;
	// 输出 ello world

	//s1.erase(5);	//和下面效果类似 默认从下标5位置开始删完
	s1.erase(5, 100);
	cout << s1 << endl;
	// 输出 ello

	// replace效率不高,慎用,和insert类似,要挪动数据
	string s2("hello world");
	s2.replace(5, 1, "%20");
	cout << s2 << endl;
	// 输出 hello % 20world
}

swap & pop_back

void test_string22()
{
	string a = "money";
	string b = "goods";
	cout << a <<' '<< b << endl;

	a.swap(b);
	a.pop_back();	// 尾删一个字符
	cout << a <<' '<< b << endl;
}

string类对象的非成员函数

 operator+

为了处理this指针只能在函数参数第一个位置的情况,C++将operator+设置为全局函数,就是应对一下情况:

void test_string23()
{
	string s1 = "hello";
	string s2 = "hello11";

	string ret1 = s1 + s2;
	cout << ret1 << endl;

	string ret2 = s1 + "xxxxx";
	cout << ret2 << endl;

	//特殊情况,this指针在第二个位置
	string ret3 = "xxxxx" + s1;
	cout << ret3 << endl;
}

relational operators(关系运算符)

void test_string23()
{
	string s1 = "hello";
	string s2 = "hello11";
	// 字典序比较
	cout << (s1 < s2) << endl;
}

按照ascii码比较即可,一位一位依次比较。

getline

从输入中提取整行字符,直到找到分隔符 dim或换行符 '\n'为止

void test_string24()
{
	// 默认规定空格或者换行是多个值之间分割
	string str;
	//cin >> str;
	getline(cin, str);
	//类似gets

	cout << str << endl;
}

to_string & stoi

int main()
{
	// atoi   字符转整形  
	// itoa	  整形转字符
	// stoi   string转整形

	// to_string  整形转string
	int x = 0, y = 0;
	cin >> x>>y;
	string str = to_string(x + y);
	cout << str << endl;

	int z = stoi(str);

	return 0;
}

注意,字符串转整型最多只能转42亿一下的(unsigne int)平常不建议使用string转整形。


取域名使用实践

void test_string26()
{
	string file("string.cpp.zip");
	//从后往前找第一个出现.的地方
	size_t pos = file.rfind('.');
	//string suffix = file.substr(pos, file.size() - pos);
	string suffix = file.substr(pos);
	//从.开始取到字符串结束

	cout << suffix << endl;//  .zip

	string url("https://gitee.com/TestString.cpp");
	//从前往后找第一个出现:的地方
	size_t pos1 = url.find(':');
	//substr区间为左闭右开,取不到:
	string url1 = url.substr(0, pos1 - 0);
	cout << url1 << endl;//  http

	size_t pos2 = url.find('/', pos1 + 3);//跳过://找第一个出现/的位置
	string url2 = url.substr(pos1 + 3, pos2 - (pos1 + 3));
	cout << url2 << endl;//  gitee.com

	string url3 = url.substr(pos2 + 1);
	cout << url3 << endl;// TestString.cpp
}

通过灵活运用上面的接口,可以实现取网址端口和域名的功能,下期讲解常用端口的底层实现。

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

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

相关文章

如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?

前言 昨天分享了在 .NET Core Console 项目中应用 NLog 写日志的详细例子&#xff0c;有几位小伙伴私信说 ASP.NET Core Web Api 项目中无法使用&#xff0c;其实在 ASP.NET Core Web Api 项目中应用 NLog 写日志&#xff0c;跟 .NET Core Console 项目是有些不一样的&#xf…

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术&#xff0c;它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS&#xff08;传输层安全&#xff09;协议是用于保护网络数据传输的一种加密协议&#xff0c;而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…

1.0 Android中Activity的基础知识

一&#xff1a;Activity的定义 Activity是一个应用组件&#xff0c;它提供了一个用户界面&#xff0c;允许用户执行一个单一的、明确的操作&#xff0c;用户看的见的操作都是在activity中执行的。Activity的实现需要在manifest中进行定义&#xff0c;不让会造成程序报错。 1.…

第一百零四节 Java面向对象设计 - Java内部类成员

Java面向对象设计 - Java内部类成员 内部类可以访问其所有实例成员&#xff0c;实例字段和其封闭类的实例方法。 class Outer {private int value 2014;public class Inner {public void printValue() {System.out.println("Inner: Value " value);}} // Inner …

SAP PP学习笔记17 - MTS(Make-to-Stock) 按库存生产 的策略70,策略59

上几章讲了几种策略&#xff0c;策略10&#xff0c;11&#xff0c;30&#xff0c;40。 SAP PP学习笔记14 - MTS&#xff08;Make-to-Stock) 按库存生产&#xff08;策略10&#xff09;&#xff0c;以及生产计划的概要-CSDN博客 SAP PP学习笔记15 - MTS&#xff08;Make-to-St…

linux用户态操作GPIO首先需要export导出

在使用系统调用来实现 GPIO&#xff08;通用输入输出端口&#xff09;的输入输出操作时&#xff0c;同样需要先通过 export 属性文件来导出 GPIO&#xff0c;这是因为 Linux 内核对 GPIO 的管理和访问机制决定了这一点。 以下是具体原因&#xff1a; 内核设备模型&#xff1a…

Linux C语言:输入输出(printf scanf)

一、数据输出 1、C语言I/O操作由函数实现 #include <stdio.h> 2、字符输出函数 格式: int putchar( int c ) 参数: c为字符常量、变量或表达式 功能&#xff1a;把字符c输出到显示器上 返值&#xff1a;putchar函数的返回值是参数的ASCLL码值&#xff1b; #inclu…

【CTF-Events】R3CTF/YUANHENGCTF 2024 两道密码题记录一下

R3CTF2024 WP 文章目录 R3CTF2024 WPCryptoR0System考点&#xff1a;代码审计 ECDH R1System考点&#xff1a;代码审计 ECDH Crypto R0System 考点&#xff1a;代码审计 ECDH 打开代码后有两个小系统&#xff0c;看一下功能 然后再看一下登录之后有哪些功能 其实到这里就可以…

干货分享!2024年Instagram营销必备插件

Instagram是营销人员常用的社交媒体平台&#xff0c;通过提升品牌知名度来推动业务增长。今天给大家分享一些超实用的Instagram营销插件&#xff0c;无论是下载图片视频&#xff0c;还是预先发布帖子&#xff0c;这些工具都可以是你的得力助手&#xff0c;让你的INS运营效率蹭蹭…

spring常用注解(八)@Async

一、介绍 1、介绍 二、原理 三、集成与使用 1、集成方法 &#xff08;1&#xff09;开启 使用以下注解开启 EnableAsync &#xff08;2&#xff09;使用 在需要异步处理的方法上加上 Async 2、返回值 Async注解的方法返回值只能为void或者Future<T>。 &…

纠删码是什么?有什么作用?

在阿里云对象存储中使用的是用基于纠删码、多副本的数据冗余存储机制&#xff0c;将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上&#xff0c;确保硬件失效时的数据持久性和可用性。这里我们来详细介绍一下什么是纠删码。 纠删码&#xff08;Erasure Coding&…

什么是覆盖索引 ?

走当前索引就足够&#xff0c;而无需回表就能找到所有数据&#xff0c;就叫覆盖索引。 比如 key1 上有索引。&#xff08;它是一个普通的二级索引&#xff09;。 那么select key1 from s1 where key1 a 这种就叫覆盖索引。 表现就是explain时&#xff0c; Extra 那里显示 …

【深度学习】使用 LSTM 网络预测水位数据

使用 LSTM 网络预测水位数据 在本文中&#xff0c;我们将介绍如何使用 LSTM&#xff08;长短期记忆&#xff09;神经网络来预测水位数据。我们将使用 Python 中的一些流行库&#xff0c;如 NumPy、Pandas 和 Keras。首先&#xff0c;我们将加载数据&#xff0c;然后预处理它以…

基于 Transformer 的大语言模型

语言建模作为语言模型&#xff08;LMs&#xff09;的基本功能&#xff0c;涉及对单词序列的建模以及预测后续单词的分布。 近年来&#xff0c;研究人员发现&#xff0c;扩大语言模型的规模不仅增强了它们的语言建模能力&#xff0c;而且还产生了处理传统NLP任务之外更复杂任务…

Pixi.js学习 (五)动画效果与变量逻辑控制

目录 前言 一、动画效果 1.1 帧频 1.2 帧频函数 二、变量逻辑控制 2.1 定义变量的语法 2.2 使用变量控制逻辑 2.3 使用变量控制追加效果 三、实战 例题一&#xff1a;完成天天酷跑 例题一代码&#xff1a; 总结 前言 为了提高作者的代码编辑水品&#xff0c;作者在使用博客的时…

遥感和GIS在滑坡、泥石流风险普查中的技术应用教程

原文链接&#xff1a;感和GIS在滑坡、泥石流风险普查中的技术应用教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606346&idx5&snb98d2e84b0273507ec23d3d1212b8421&chksmfa8261adcdf5e8bb26dfa824d320d1754e83b5e0ca523545704e59a3cda8aa370387…

强烈推荐!Windows 11 24H2 版本系统下载(新功能多多)

微软向 Windows 11 Version 24H2 用户推送了 KB5036908 更新&#xff0c;标志着 24H2 版本的首次累积更新&#xff0c;更新后用户的系统版本号将升级至 26100.268。在新版本中&#xff0c;最显著的变化包括对文件资源管理器的改进、整合的 Copilot 功能、编辑 PNG 文件元数据的…

AI实时免费在线图片工具4:WordArt艺术字生成;IC-Light打光模型;screenshot to code图像直接生成网页

1、艺术字生成WordArt https://modelscope.cn/studios/WordArt/WordArt/summary?reftop.aibase.com 2、打光模型IC-Light https://huggingface.co/spaces/lllyasviel/IC-Light Screenshot to Code图像直接生成网页 https://huggingface.co/spaces/HuggingFaceM4/screen…

AI大模型智慧政务解决方案

随着AI大模型技术的蓬勃发展和普及应用&#xff0c;我们的政务治理正迎来一场波澜壮阔的革新巨浪。这场革新&#xff0c;不仅是技术层面的飞跃&#xff0c;更是一场深刻改变治理理念的伟大变革。它彻底颠覆了传统政务治理中依赖人力、效率低下、响应迟缓的“人盯人”模式&#…

10_Transformer预热---注意力机制(Attention)

1.1 什么是注意力机制(attention) 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在神经网络中用于增强模型处理特定输入特征的能力的技术。它最早被应用于自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;特别是在机器翻译中&#xff0c;如Google的…