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

news2024/11/13 16:23:24

友情链接: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/674032.html

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

相关文章

python3.9 安装 pyspider

安装pyspider pip install pyspider 直接报错 Please specify --curl-dir/path/to/built/libcurl 于是从PythonLibs官网 中获取依赖并自行下载到本地 下载与3.9对应的 执行安装 pip install D:\下载\ad3-2.2.1-cp39-cp39-win32.whl 安装成功之后 执行 pip install p…

1748_Perl中使用通配符处理文件

全部学习汇总&#xff1a; GreyZhang/perl_basic: some perl basic learning notes. (github.com) 使用通配符处理文件一般是用于文件的拷贝、删除以及对文件逐个分析等功能。在Perl中遇到的相应的功能基本上也是如此。通配符匹配处理文件&#xff08;文件名&#xff09;需要使…

前端JavaScript入门-day01

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 JavaScript 介绍 1 JavaScript 是什么 1. JavaScript &#xff08;是什么&#xff1f;&#xff09; 2. 作…

H. Don‘t Blame Me(DP)

Problem - 1829H - Codeforces 很遗憾&#xff0c;这道题目的出题人没有想到一个有趣的故事&#xff0c;所以他只是让你解决以下问题。 给定由n个正整数组成的数组a&#xff0c;计算具有子序列中元素的按位AND在其二进制表示中恰好有k个设置位的非空子序列的数量。答案可能很大…

Winwebmail搭建邮件服务器

配置环境 角色系统IP地址DNS邮件服务器WindowServer2016192.168.1.1/24192.168.1.1客户端1Window10192.168.1.10/24192.168.1.1客户端2Window10192.168.1.20/24192.168.1.1 Winwebmail介绍 WinWebMail是安全高速的全功能邮件服务器&#xff0c;融合强大的功能与轻松的管理为…

macOS Ventura 13.4.1 (22F82|22F2083) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.4.1 (22F82|22F2083) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安…

C++ 指针常量与常量指针

指针常量与常量指针的翻译就好比机器学习中Regularization翻译成正则化一样&#xff0c;讲真&#xff0c;正则化这个说法确实要比规则化显得高端些&#xff0c;但是到了理解的时候&#xff0c;还是要按照规则化理解。 指针常量与常量指针这个概念是一样的&#xff0c;英文里没…

【STM32】软件I2C(支持多字节)

I2C简介 I2C总线是一种串行、半双工的总线&#xff0c;主要用于近距离、低速的芯片之间的通信。I2C总线有两根双向的信号线&#xff0c;一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步。 在一个i2c通讯总线中&#xff0c;可连接多个i2c通讯设备&a…

Linux国产操作系统,UCA-系统工程师学习必备技能,系统状态查询和进程管理,uname命令last命令 top命令和 ps命令 kill命令

目录 ​编辑 1.系统状态查询 1. 1.uname命令 1.2. last命令 1.3. top命令 2.进程管理 2.1. ps命令 2.2. kill命令 1.系统状态查询 1. 1.uname命令 rootuos~#: uname rootuos~#: uname -r 4.19是内核&#xff0c;0-6-amd64是架构。 rootuos~#: uname -a eagle操作系统的…

【深入浅出 Spring Security(十一)】授权原理分析和持久化URL权限管理

授权原理分析和持久化URL权限管理 一、必须知道的三大组件&#xff08;Overview&#xff09;二、FilterSecurityInterceptor 源码分析SecurityMetadataSource 分析 三、自定义 FilterSecurityMetadataSource 对象&#xff08;实战&#xff09;自定义表CustomSecurityMetadataSo…

【C++】构造函数调用规则

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01;时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 1、缘起 &#xff08;1&#xff09;默认情况下&#xff0c;C 编译器至少给一个类添加 3 个函数 ① 默认构造函数&#xff08;无参&#…

多无人车自动编队

matlab2016b可运行 Kaveh Fathian - Distributed Formation Control of Cars with Collision Avoidance (google.com)

极致呈现系列之:Echarts桑基图的流动旋律

目录 什么是桑基图桑基图的特点及应用场景Echarts中桑基图的常用属性Vue3中创建桑基图美化桑基图 在各种复杂系统中&#xff0c;我们经常需要了解不同流量之间的关系和流动情况。这种信息的可视化呈现对于我们理解系统的结构和转移过程至关重要。桑基图作为一种强大的可视化工具…

Lambda and Collections

我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起。 为引入Lambda表达式&#xff0c;Java8新增了java.util.funcion包&#xff0c;里面包含常用的函数接口&#xff0c;这是Lambda表达式的基础&#xff0c;Java集合框架也新增部分接口&#xff0c;以便与…

tf卡打不开怎么办?tf卡数据丢失怎么恢复

TF卡打不开怎么办&#xff1f;当TF卡中的数据丢失后&#xff0c;又如何恢复呢&#xff1f;下面小编已为您梳理和归纳了答案&#xff01;请继续阅读下文。 一、TF卡打不开怎么办&#xff1f; 首先&#xff0c;我们需要了解导致TF卡读不出来的具体原因&#xff0c;这可能包括没…

ch8_4中断系统

为什么需要中断&#xff1f; 输入&#xff0c;输出。 计算机程序调试&#xff1b;发生异常事件&#xff1b; 都需要由中断系统进行处理. 引发中断的各种因素包括&#xff1a;人为设置中断&#xff0c;程序性事故&#xff0c; 硬件故障&#xff0c;I/O设备&#xff0c;外部事件等…

英伟达驱动安装

https://zhuanlan.zhihu.com/p/60307377 https://www.nvidia.cn/Download/index.aspx?langcn

路由器的工作原理详解

什么叫路由&#xff1f; 路由器的英文是 Router&#xff0c;也就是「找路的工具」。找什么路&#xff1f;寻找各个网络节点之间的路。 换句话说&#xff0c;路由器就像是快递中转站&#xff0c;包裹会经过一个个的中转站&#xff0c;从遥远的地方寄到你家附近&#xff0c;数据…

驱动开发:内核远程线程实现DLL注入

在笔者上一篇文章《驱动开发&#xff1a;内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的&#xff0c;本章将继续探索全新的注入方式&#xff0c;通过NtCreateThreadEx这个内核函数实现注入DLL的目的&#xff0c;需要注意的是该函数在微软系统中…

Java多线程阻塞队列(BlockingDeque)的简析

目录 一.什么是阻塞队列(BlockingDeque) 二.阻塞队列有什么用? 三.运用阻塞队列来实现一个最简单的生产者消费者 四.模拟实现阻塞队列 一.什么是阻塞队列(BlockingDeque) 既然叫做阻塞队列,那么他就满足两个特性 1.队列:先进先出 2.阻塞:空了不让出,满了不让进 &#…