C++Primer3.2 标准类型string

news2024/10/7 2:32:03

文章目录

    • 初始化string对象
    • 读写string对象
    • string的empty和size操作
    • 不同string对象的比较
    • string的加法
    • 处理string对象的字符
    • 遍历string中的每个字符

初始化string对象

//string的初始化
void test01()
{                                      
	string s1;					// 默认初始化,s1是一个空字符串
	string s2 = s1;				// s2是s1副本
	string s3 = "hiya";			// s3是"hiya"
	string s4(10,'c');			// s4内容是cccccccccc
	string s5;
	cin >> s5;
	cout << s5 << endl;
	cin >> s1 >> s2;
	cout << s1 << s2 << endl;
}

输出:

aa
aa
bb
cc
bbcc
  • 默认初始化,s1是一个空字符串,该string对象没有任何字符
  • string s3 = "hiya"使用 = 初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右边的拷贝到左边的对象中去

读写string对象

读取操作时,string会自动忽略开头的空白(即空格符、换行符、制表符等),然后从第一个真正字符开始读起,直到下一处空白为止。因此,如果输入是" Hello World ",那么输出将是”Hello“,不允许有空格

同时,也可以多个输入多个输出连写在一起

string s1,s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;

如果上述输入是" Hello World ",那么输出将是”HelloWorld “,也不允许有空格

string的empty和size操作

  • empty函数根据string对象是否为空返回一个对应的布尔值

  • size函数返回string对象的长度(即string对象中字符的个数)

    void test03()
    {
    	string line = "aaa";
    	// .size()得到的是无符号型,与-1比时,无符号转为非常大的有符号型
    	if(line.size() < -1)
    	{
    		cout << "warning" << endl;
    	}
    }
    

    输出:

    warning
    

    由于line.size()会返回一个无符号整型数,所以在表达式line.size()<n,如果在表达式中混用了有符号和无符号数(如line.size() < -1),将会产生报错。因为-1是一个整型负数,在表达式中会自动转换成一个比较大的无符号值。

不同string对象的比较

判断大小的标准:

  1. string长度不同,则较短的string对象 < 较长的string对象
  2. string长度相同,则比较第一个不同符号的字符
void test04()
{
	string s1 = "hello";
	string s2 = "hallo";
	if(s2 < s1)
	{
		string s3 = s1 +","+ s2 + "\n";
		cout << s3 << endl;
	}
}

输出:

hello,hallo

string的加法

string s1 = "hello", s2 = "world";
string s3 = s1 + s2;	// s3内容是helloworld

因为标准库允许把字符‘a’、字符串”a“转换为string对象,因此‘a’、”b“也可以参与到string对象的加法运算中:

string s1 = "hello", s2 = "world";
string s3 = s1 +"," + s2 + '\n';

值得注意得是,如果string对象、‘a’、“b”在同一条语句中使用,必须要保证+号两侧至少有一个string对象.

✅正确:

string s4 = s1 + ",";
string s5 = s1 + "," + "world";

❌错误:

string s6 = "hello" + ",";
string s7 = "hello" + "," + s1;
  • 其中,string s5 = s1 + "," + "world"等价为string s5 = (s1 + ",") + "world"s1 + ","是一个新的string对象
  • string s7 = "hello" + "," + s1等价为string s7 = ("hello" + ",") + s1,而"hello" + ","不是string类型,不能相加

string、“aabb”相似,但不是同一个东西

处理string对象的字符

可以引用cctype库处理string中的字符

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

void test05()
{
	string s = "1d3g135";
	for(int i = 0;i<s.size();i++)
	{
		//判断字符是不是字母
		if(isalpha(s[i]))
		{
			cout << "isalpha" << endl;
		}
	}
}

int main() {
	test05();
	system("pause");
	return 0;
}

image-20240418174434632

遍历string中的每个字符

最简单的就是使用for循环遍历:

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

也可以使用范围for语句,效果一样:

for(auto c : s)
{
	cout << c <<endl;	// c = s[i]
}

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

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

相关文章

YOLOv8改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(包含C2f创新改进,解决低FLOPs陷阱)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制,这个论文中介绍了一个名为ParameterNet的新型设计原则,它旨在在大规模视觉预训练模型中增加参数数量,同时尽量不增加浮点运算(FLOPs),所以本文的DynamicConv被提出…

AIoT人工智能物联网之deepstream

1.deepstream介绍安装 deepstream是一个很强大的工具集,能够执行数据收集、数据预处理、视频追踪、编码等功能 (1)deepstream docker 版本查询 网页查询 https://catalog.ngc.nvidia.com/containers (2)下载 deepstream docker 对应 版本 https://catalog.ngc.nvidia.c…

【微信公众平台】扫码登陆

文章目录 前置准备测试号接口配置 带参数二维码登陆获取access token获取Ticket拼装二维码Url编写接口返回二维码接收扫描带参数二维码事件编写登陆轮训接口测试页面 网页授权二维码登陆生成ticket生成授权地址获取QR码静态文件支持编写获取QR码的接口 接收重定向参数轮训登陆接…

正确解决:关于Lattic Diamond和Radiant License冲突问题(无法破解问题)

一、问题 今天工作&#xff0c;搞16nm Avant E系列FPGA&#xff0c;需要用到莱迪思的Radiant 2023.2软件&#xff08;按这个博主的安装流程Lattice Radiant 2023.1 软件安装教程&#xff09;。 安装好之后&#xff0c;设置环境变量&#xff0c;导入License.dat就是破解不了&…

从零开始学习Linux(3)----权限

1.Linux权限的概念 Linux用户&#xff1a;1.root&#xff0c;超级管理员 2.非root&#xff0c;XXX&#xff0c;普通用户 命令&#xff1a;su[用户名] 功能&#xff1a;切换用户。 su -&#xff1a;是指以root的身份重新登录一次。 普通用户切换root需要输入密码&#xff0c;…

【Java开发指南 | 第二篇】标识符、Java关键字及注释

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 标识符Java关键字Java注释 标识符 Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 所有的标识符都应该以字母&#xff08;A-Z 或者 a-z&#xff09;,美元符&#xff08;$&#xff0…

登录解析(后端)

调试登录接口 进入实现类可以有 验证码校验 登录前置校验 用户验证 验证码校验 通过uuid获取redis 中存储的验证码信息&#xff0c;获取后对用户填写的验证码数据进行校验比对 用户验证 1.进入控制器的 /login 方法 2.进入security账号鉴权功能&#xff0c;经过jar内的流…

5.2 mybatis之autoMappingBehavior作用

文章目录 1. NONE关闭自动映射2. PARTIAL非嵌套结果映射3. FULL全自动映射 众所周知mybatis中标签< resultMap >是用来处理数据库库字段与java对象属性映射的。通常java对象属性&#xff08;驼峰格式&#xff09;与数据库表字段&#xff08;下划线形式&#xff09;是一 一…

python3.poc。sqlmapTamperPocsuite

目的&#xff0c;掌握工具的api接口&#xff0c;框架工具二次开发 ---sqlmap的api接口&#xff1a;https://www.freebuf.com/articles/web/204875.html 应用&#xff1a;配合前期信息收集的到可能存在注入点的地方&#xff0c;批量化的去扫描 #开发当前项目过程&#xff1a…

【YOLOv5】使用yolov5训练模型时报错合集

文章目录 前言问题1 -- VsCode终端无法进入Anaconda创建的虚拟环境【问题描述】【问题分析】【解决方式】方法一方法二 问题2 -- 怎么在VsCode中为项目配置Anaconda创建的虚拟环境【问题描述】【解决方式】 问题3 -- yolov5训练模型时报错RuntimeError: result type Float cant…

c语言基础总结

1. c语言概述 c语言是计算机编程语言的一种&#xff0c;编程语言用于人和机器交流。 1.1 c语言特点 简洁 ​ c语言的语法简单&#xff0c;语句清晰明了&#xff0c;使得程序易于阅读和理解 高效 ​ c语言的执行效率高&#xff0c;可以用于开发需要高性能的应用程序 可移…

C语言中的控制语句(分支语句 if、switch、三目运算符)

程序执行的三大流程 顺序 : 从上向下&#xff0c; 顺序执行代码分支 : 根据条件判断&#xff0c; 决定执行代码的分支循环 : 让特定代码重复的执行 分支语句 条件语句用来根据不同的条件来执行不同的语句&#xff0c;C语言中常用的条件语句包括if语句和switch语句。 if 语句…

比特币叙事大转向

作者&#xff1a;David Lawant 编译&#xff1a;秦晋 要理比特币解减半动态&#xff0c;最关键的图表是下面这张&#xff0c;而不是价格图表。它显示了自 2012 年以来&#xff0c;矿业总收入与比特币现货交易量的比例&#xff0c;并标注了三个减半日期。 虽然矿工仍然是比特币生…

语音识别ASR背后的原理

现在人机语音交互已经成为我们日常生活的一部分&#xff0c;语音交互更自然&#xff0c;大大的提高了效率。 一、什么是语音识别 文字绝对算是人类最伟大的发明之一&#xff0c;正是因为有了文字&#xff0c;人类的文明成果才得以延续。但是文字只是记录方式&#xff0c;人类…

【C++】C++11右值引用

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.什么是左值&&…

npm最新淘宝镜像站已经更新registry(2024-04-19)

1、npm替换地址 旧的 https://registry.npm.taobao.org 已替换为 https://registry.npmmirror.com 淘宝镜像的淘宝官方提供的方法&#xff08;最新的源配置&#xff09; npm config set registry https://registry.npmmirror.com 镜像站网址&#xff1a; npmm…

【Node.js】 fs模块全解析

&#x1f525;【Node.js】 fs模块全解析 &#x1f4e2; 引言 在Node.js开发中&#xff0c;fs模块犹如一把万能钥匙&#xff0c;解锁着整个文件系统的操作。从读取文件、写入文件、检查状态到目录管理&#xff0c;无所不能。接下来&#xff0c;我们将逐一揭开fs模块中最常用的那…

RAID技术

RIAD 什么是RAID 磁盘阵列:利用虚拟化存储技术把多个硬盘组合起来&#xff0c;成为一个或多个硬盘阵列组&#xff0c;目的为提升性能或数据冗余&#xff0c;或是两者同时提升。 简单来说RAID是把多个硬盘组合成为一个逻辑硬盘&#xff0c;因此&#xff0c;操作系统只会把它当作…

若依框架后台管理系统_修改后台管理密码

若依框架后台管理系统_修改后台管理密码 1. 找见加密函数&#xff1a; /*** 生成BCryptPasswordEncoder密码** param password 密码* return 加密字符串*/public static String encryptPassword(String password){BCryptPasswordEncoder passwordEncoder new BCryptPasswordE…

Kubernetes Pod的配置管理 ConfigMap和Secret

目录 前言 一、为什么需要配置管理 二、使用ConfigMap管理Pod的配置信息 2.1 创建ConfigMap&#xff08;4种方式&#xff09; 2.1.1 指定ConfigMap的参数创建 2.1.2 指定配置文件创建ConfigMap 2.1.3 通过一个文件内的多个键值对创建ConfigMap 2.1.4 yaml文件创建Config…