【C++篇】字符串:标准库string类

news2024/9/24 15:28:33

友情链接:C/C++系列系统学习目录

知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误,同时方便本人的基础复习,也希望能帮助到大家
 
最好的好人,都是犯过错误的过来人;一个人往往因为有一点小小的缺点,将来会变得更好。如有错漏之处,敬请指正,有更好的方法,也希望不吝提出。最好的生活方式就是和努力的大家,一起奔跑在路上


文章目录

    • ⛳(二)C++字符串:标准库string类
      • 🎈1.基本用法
        • (1)string变量的定义、初始化
        • (2)string变量的输入、输出
        • (3)string对象上的操作
      • 🎈2.string类对象与字符数组的区别


⛳(二)C++字符串:标准库string类

C++处理字符串的方式有两种,一种就是在C中讲的采用字符数组的方式,还有一种基于string类库的方法

🎈1.基本用法

C++可以使用string类型的变量(使用C++的话说是对象)而不是字符数组来存储字符串,首先必须包含头文件string,同时string类位于名称空间std中:

#include <iostream>   
#include <string>

using namespace std;

int main()                                   
{                                           
    string a;
    return 0;
}
  • string类定义隐藏了字符串的数组性质,能够像处理普通变量那样处理字符串
  • 可以使用C风格字符串来初始化string对象。
  • 可以使用 cin来将键盘输入存储到string对象中。
  • 可以使用cout来显示 string对象。
  • 可以使用数组表示法来访问存储在 string 对象中的字符。

(1)string变量的定义、初始化

string girlFriend1;   //定义了一个字符串变量,此时,该字符串是空字符串
girlFriend1 = "王菲"; //把字符串常量"王菲"拷贝到 girlFriend
cout << "girlFriend1 = " << girlFriend1 << endl;

string girlFriend2;
girlFriend2 = girlFriend1; //把字符串变量 girlFriend1 的值拷贝到 girlFriend2
cout << "girlFriend2 = " << girlFriend2 << endl
    
//定义 girlFriend3 的同时,使用字符串常量"周迅"来初始化
string girlFriend3("周迅");
cout << "girlFriend3 = " << girlFriend3 << end
    
//定义 girlFriend4 的同时,使用字符串变量来初始化
string girlFriend4(girlFriend3);
cout << "girlFriend4 = " << girlFriend4 << endl;

//第一个参数表示字符个数
string girlFriend5(10, 'A');
cout << "girlFriend5 = " << girlFriend5 << endl;

(2)string变量的输入、输出

//基本输入输出
string job;
cout << "你是做什么工作的?" << endl;
cin >> job;
cout << "做" << job << ",收入一定不错吧?" << endl;

//自动跳过空白字符
string university; //大学
string profession; //专业
cout << "你是哪个学习毕业的?学什么专业? ";
// 输入: 清华 考古 hello
// 自动跳过空白字符
cin >> university >> profession;
cout << university << "的" << profession << "
    
    
//连续输入多个字符串,个数不确定
string food; 
int i = 0;
cout << "你喜欢什么美食? ";
while (cin >> food) { //当用户输入 Ctrl + z 并回车 cin >> food 返回 0, 0 就是假
    i = i + 1;
    cout << "你喜欢的第" << i << "美食是:" << food << endl ;
    cout << "你还喜欢吃什么美食? ";
}

(3)string对象上的操作

在这里插入图片描述

字符串合并:

string类简化了字符串合并操作。可以使用运算符+将两个string对象合并起来,还可以使用运算+=将字符串附加到string对象的末尾。

string str3 ;
str3 = strl +str2;   //assign str3 the joinedstrings
str += str2 ;        //add str2 to the end of str1

字符串复制:

同样可以使用函数strcpy()将字符串复制到字符数组中,使用函数 strcat() 将字符串附加到字符数组末尾:

strcpy(charr1,charr2);   //copy charr2 to charr1
strcat(charr1,charr2);  //append contents of charr2 tO char1

strlen()和size()的区别:

  • 函数strlen( )是一个常规函数,它接受一个C风格字符串作为参数,并返回该字符串包含的字符数(注意不包括最后的空字符)。
  • size()是string类的一个方法,功能基本上与strlen( )相同,也不包括最后的空字符

🎈2.string类对象与字符数组的区别

  • string类对象和字符数组之间的主要区别是,可以将string 对象声明为简单变量,而不是数组
  • 类设计让程序能够自动处理string的大小。例如 strI 的声明创建一个长度为0的sting对象;但程序将输入读取到str中时,将自动调整str1的长度。这使得与使用数组相比,使用string对象更方便,也更安全。
  • 从理论上说,可以将 char 数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体。
  • 不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象

原始字符串:

在原始字符串中,字符表示的就是自己,例如,序列\n不表示换行符,而表示两个常规字符—斜杠和n,用前缀R来标识原始字符串:

cout << R"(Jimn "King" Tutt uses " \n" instead of endl.) " << '\n ';

输入原始字符串时,按回车键不仅会移到下一行,还将在原始字符串中添加回车字符。


行文至此,落笔为终。文末搁笔,思绪驳杂。只道谢不道别。早晚复相逢,且祝诸君平安喜乐,万事顺意。

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

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

相关文章

Eyeshot 2023 Added NuGet packages.

Added Microsoft Visual Studio 2022 Extensions menu item.Microsoft .NET 6 Windows Toolbox items.Added NuGet packages.Planar curve projection on Sketch plane.Improved fillet surfaces quality and speed.Added ICurve.ConverToLinearPath() family of methods.   …

RabbitMQ学习笔记4(小滴课堂)RabbitMQ工作队列模型实战

Java项目整合RabbitMQ 创建一个maven项目。 然后我们在maven里加上jdk和rabbitmq的依赖设置&#xff1a; 我们写一段生产者的代码&#xff1a; 然后我们去运行它&#xff1a; 可以看到这里有一个队列。 现在我们是可以查看到队列的。 我们去写消费者代码&#xff1a; 这里的之…

LeetCode 2090. K Radius Subarray Averages【前缀和,滑动窗口,数组】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Redis是什么,如何学习,如何整合SpringBoot?

目录 一、Redis是什么&#xff1f; 二、如何学习Redis 三、如何整合SpringBoot 一、Redis是什么&#xff1f; Redis 是一个高性能的开源 NoSQL 数据库&#xff0c;支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合等。它采用内存存储&#xff0c;可以快…

Python3 函数与数据结构 | 菜鸟教程(十一)

目录 一、Python3 函数 &#xff08;一&#xff09;定义一个函数 1、你可以定义一个由自己想要功能的函数&#xff0c;以下是简单的规则&#xff1a; 2、语法 3、实例 ①让我们使用函数来输出"Hello World&#xff01;"&#xff1a; ②更复杂点的应用&#xff…

axios 发送请求请求头信息不包含Cookie信息

问题 axios 发送请求请求头信息不包含Cookie信息 详细问题 使用VueSpringBoot进行项目开发&#xff0c;axios进行网络请求&#xff0c;发送请求&#xff0c;请求头信息不包含Cookie信息 具体如下 实际效果 预期效果 解决方案 作用域 Vue项目全局配置 打开Vue项目的入口…

SpringSecurity是什么,如何学习SpringSecurity?

目录 一、SpringSecurity是什么 二、如何学习SpringSecurity 三、SpringSecurity整合springboot 一、SpringSecurity是什么 Spring Security是一个功能强大的安全框架&#xff0c;它为企业级应用程序提供了完整的身份验证和授权管理。它是一个开源项目&#xff0c;由Pivota…

Linux:第五章课后习题及答案

第五章 Linux常用命令 Q1&#xff1a;常用的文本内容显示命令有哪些&#xff1f;区别是什么&#xff1f; 文本内容显示的命令有cat&#xff0c;more&#xff0c;less&#xff0c; head&#xff0c;tailcat&#xff1a;显示文本文件&#xff0c; 也可以把几个文件 内容附加到另…

第一章 AlexNet网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

python绘画多边形(turtle)

目录 前言 正三角形 正四边形 正多边形 总结&#xff1a; 前言 事情的起因是&#xff0c;我今天心血来潮想让openai生成路飞的图像看效果怎么样&#xff0c;他是这样回我的。 我这一想&#xff0c;这不稳了吗&#xff0c;这么轻松。结果…… import turtle# 定义画笔颜色…

【Visual Studio】报错 C1083,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 问题解决方案Ref. 问题 使用 C 语言&#xff0c;配合 Qt 开发串口通信界面时&#xff0c;报错代码 C1083。 复制一下错误信息&#xff0c;方便别人…

【C语言进阶】编译链接

文章目录 &#x1f4d6;程序的两种环境 &#x1f516;翻译环境&#x1f516;执行环境 &#x1f4d6;详解翻译环境&#x1f516;从人的角度去看编译链接&#x1f516;预编译&#x1f516;编译&#x1f516;汇编&#x1f516;链接&#x1f516;符号表的作用 &#x1f4d6;执行环境…

外贸订单管理平台有哪些?

外贸订单的管理是外贸出口业务中非常重要的一项管理工作&#xff0c;订单能否实现准时交付则需要涉及到各种流程顺畅的支持。那么外贸订单管理平台有哪些&#xff1f;有孚盟软件。 首先&#xff0c;外贸订单管理平台主要是解决外贸公司的订单查询与管理&#xff0c;面对大量不…

2.4G无线收发芯片 XL2400,SOP8封装,外挂MCU使用

XL2400 芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块&#xff0c;并且支持一对多组网和带 ACK 的通信模式。发射输出率、工作频道以及通信数据率均可配置。芯片已将多颗外围贴片阻容…

mysql错误-1055 - Expression #1 of SELECT list is not in GROUP BY clause 解决方案

目录 业务场景发现问题表结构表数据sql查询 分析问题验证 解决问题方案一方案二方案三 注意事项 业务场景 当遇到数据库重复数据&#xff0c;就要将数据进行分组&#xff0c;取其中一条来展示&#xff0c;此时就要用到group by语句。 但当mysql的版本高于5.7时&#xff0c;在执…

ESP32设备驱动-TCA9548A-I2C多路复用器驱动

TCA9548A-I2C 多路复用器驱动 文章目录 TCA9548A-I2C 多路复用器驱动1、TCA9548A介绍2、硬件准备3、软件准备4、驱动实现4.1 TCA9548A总线复用实现4.2 驱动多个OLED显示屏4.3 驱动多个BME280传感器在本文中,将介绍如何使用 TCA9458A I2C 多路复用器扩展 I2C 总线端口。 如果你…

【Python 基础篇】Python 列表及列表常用函数

文章目录 一. 什么是列表二. 列表的创建和访问2.1 创建列表2.2 访问列表元素 三. 列表的操作3.1 修改列表元素3.2 列表的添加和删除元素3.2.1 添加元素3.2.2 删除元素 3.3 列表的排序3.4 判断元素是否在列表中 四. 列表的常用函数和方法五. 总结 一. 什么是列表 在Python中&am…

CLO-GitHub网站注册登录

一、GitHub GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;仅支持Git作为唯一的版本库格式进行托管。 二、登录官网 网站&#xff1a;https://github.com/ 2.1 注册Sign up Enter your Email&#xff08;输入邮箱地址&#xff09;->Continue-> ->Create a…

HCIP网络笔记分享——VLAN及MPLS多标签协议交换

第三部分 HCIA回顾一、MPLS多协议标签交换1、标签交换2、静态LSP搭建3、LDP协议4、本地LDP会话建立的过程 二、MPLS VPN的配置使用MPLS VPN 三、实际情况配置1、VLAN第一步&#xff1a;创建VLAN第二步&#xff1a;将接口划入VLAN第三步&#xff1a;配置trunk干道 2、U/T标记3、…

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion(保姆级教程)

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion&#xff08;保姆级教程&#xff09; 一、引言二、安装教程1. 注册 Kaggle2. Edit My Copy3. 进行手机号的验证4. 打开 “internet off” 开关&#xff0c;并选择显卡5. 开启 session&#xff0c;运行脚本 三、主界面介绍四、注…