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

news2024/12/24 10:40:24

目录

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
}

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

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

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

相关文章

02 DHCP原理与配置

目录 2.1 DHCP工作原理 1. 了解DHCP服务 2. 使用DHCP的好处 3. DHCP的分配方式 4. DHCP的租约过程 1. 客户机请求IP地址 2. 服务器响应 3. 客户机选择IP地址 4. 服务器确定租约 5. 重新登录 6. 更新租约 2.2 使用DHCP动态配置主机地址 2.2.1 配置DHCP服务器 1. 安装DHCP服务器…

java版UWB高精度实时定位系统源码springboot+vue

UWB人员定位系统&#xff0c;实现人员的自动识别、位置定位、区域报警等功能。该系统能高效记录人员信息&#xff0c;出入信息及位置信息&#xff0c;并能灵活的查询及管理历史轨迹&#xff0c;可极大提高信息安全度&#xff0c;有效弥补了视频监控的不足。使人员管理实现信息化…

万界星空科技SMT行业MES系统功能

在现代制造业中&#xff0c;SMT智能车间MES系统是一种全自动化的生产管理系统&#xff0c;用于监控和控制整个SMT生产流程。它通过监控SMT设备的运行状态、实时追踪生产数据&#xff0c;并与其他系统进行实时数据交换&#xff0c;以提高生产效率、降低生产成本。MES系统采用先进…

超详解——Python 序列详解——基础篇

目录 1. 序列的概念 字符串&#xff08;String&#xff09; 列表&#xff08;List&#xff09; 元组&#xff08;Tuple&#xff09; 2. 标准类型操作符 连接操作符&#xff08;&#xff09; 重复操作符&#xff08;*&#xff09; 索引操作符&#xff08;[]&#xff09; …

MySQL 8.0 安装、配置、启动、登录、连接、卸载教程

目录 前言1. 安装 MySQL 8.01.1 下载 MySQL 8.01.2 安装 MySQL 8.0 2. 配置 MySQL 8.02.1打开环境变量2.2新建变量 MYSQL_HOME2.3编辑 Path 变量 3. 启动MySQL 8.03.1验证安装与配置是否成功3.2初始化并注册MYSQL3.3 启动MYSQL服务 4.登录MySQL4.1修改账户默认密码4.2登录MYSQL…

6月11日 C++day6

#include <iostream>using namespace std; class Animal //讲解员 { public:Animal(){}virtual void perform(){cout << "" << endl;} }; class Lion:public Animal //狮子 { public:Lion(){}void perform(){Animal::perform();cout <<…

基于SSM+Jsp的交通事故档案管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

大模型高级 RAG 检索策略之混合检索

古人云&#xff1a;兼听则明&#xff0c;偏信则暗&#xff0c;意思是要同时听取各方面的意见&#xff0c;才能正确认识事物&#xff0c;只相信单方面的话&#xff0c;必然会犯片面性的错误。 在 RAG&#xff08;Retrieval Augmented Generation&#xff09;应用中也是如此&…

Generative AI原理本质、技术内核及工程实践之基于Vertex AI的大模型 (四)Vertex AI 如何将 LLM 提升到新水平

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

[论文笔记]Query Rewriting for Retrieval-Augmented Large Language Models

引言 今天带来论文Query Rewriting for Retrieval-Augmented Large Language Models的笔记。 本篇工作从查询重写的角度介绍了一种新的框架&#xff0c;即重写-检索-阅读&#xff0c;而不是以前的检索-阅读方式&#xff0c;用于检索增强的LLM。关注的是搜索查询本身的适应性&…

服饰进口清关流程及注意事项 | 国际贸易数字化平台 | 箱讯科技

随着全球化进程的不断推进&#xff0c;我国消费者对国外品牌服饰的需求日益增长&#xff0c;衣服进口业务也随之蓬勃发展。作为一名从事进口衣服行业的专业人士&#xff0c;掌握清关流程及注意事项至关重要。本文将为您详细解析衣服进口清关流程&#xff0c;并提供一些实用建议…

【CHIP】LTC2991 读取温度电压电流 调试实例

文章目录 0. ENV1. LTC2991 数据说明1. 数据计算公式2. 寄存器概述1. 管脚使能寄存器2. 芯片使能寄存器 2. 软件实现1. 概述2. 源码(部分)3. 参考log 0. ENV 软件系统&#xff1a;略 LTC2991&#xff1a;VCC3.3 温度&#xff1a;温控接v1-v2 / v2-v3 / … (双端采样)电压&#…

怎么找回Excel表格密码,两个方法,轻松解密

有时候&#xff0c;打开很久以前的工作表&#xff0c;想要进行编辑&#xff0c;结果工作表设置了工作表保护&#xff0c;需要输入密码来撤消工作表保护&#xff0c;然而&#xff0c;自己又忘记了保护工作表的密码&#xff0c;怎么办&#xff1f; 1、使用备份文件 如果您有文件…

龙迅LT9211D MIPIDSI/CSI桥接到2 PORT LVDS,支持 3840x2160 30Hz分辨率

龙迅LT9211D描述&#xff1a; LT9211D是一款高性能的MIPI DSI/CSI-2到双端口LVDS转换器。LT9211D反序列化输入的MIPI视频数据&#xff0c;解码数据包&#xff0c;并将格式化的视频数据流转换为AP和移动显示面板或摄像机之间的LVDS发射机输出。LT9211D支持最大12.5 dB输入均衡和…

for语句初识

情景导入 某校某年级某班某位男生很爱哭&#xff0c;“wa”、“wa”、“wa”声音经常不绝于耳&#xff0c;现在请你通过编程来模拟他的哭声&#xff0c;他每发出一次哭声&#xff0c;则你输出一行——一个“wa”&#xff1b; 他哭了2次&#xff0c;我们可以这样写&#xff1a; …

力扣每日一题 6/11

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 419.甲板上的战舰[中等] 题目&#xff1a; 给你一个大小为 m x n 的矩阵 b…

经典且完全免费的图像编辑处理软件比PS高级

一、简介 1、一款非常经典且完全免费的图像编辑处理软件&#xff0c;相比PS动辄1G的安装包&#xff0c;GIMP只有100 多兆&#xff0c;却包含了几乎所有常见的图片处理和平面设计相关功能&#xff0c;堪称PS替代品。 2、GIMP 几乎能实现与 PS 等同的功能&#xff0c;我们常使用…

【鸿蒙开发教程】HarmonyOS 模块关系梳理

HarmonyOS 梳理模块关系 刚开始开发的时候总是理不清鸿蒙中的模块类型和关系&#xff0c;今天就来梳理下鸿蒙中的模块类型 Module类型 Module按照使用场景可以分为两种类型&#xff1a; ●Ability类型的Module&#xff1a; 用于实现应用的功能和特性。每一个Ability类型的M…

抖音快手AI无人直播系统:教你快速搭建视频循环直播场景只需五部

AI无人直播是一种创新的直播方式&#xff0c;利用先进的技术手段实现自动直播&#xff0c;无需人工干预。这种直播方式具有全天候自动直播的能力&#xff0c;无需运营和监管即可吸引流量并转化为订单。商家门店对这种低成本高效果的方式非常欢迎。通过轻松进行直播销售&#xf…

【C语言】一篇带你高强度解析精通 字符串函数和内存函数 (万字总结大全,含思维导图)(建议收藏!!!)

【 库函数】——字符串函数和内存函数 目录 思维导图&#xff1a; 一&#xff1a;字符串函数 1.1&#xff1a;字符串常规函数 1.1.1&#xff1a;长度不受限制的字符串函数 1.1.1.1&#xff1a;strlen函数 1.1.1.2&#xff1a;strcpy函数 1.1.1.3&#xff1a;strcat函数 …