【教程】C++语言基础学习笔记(六)——String字符串

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【C++语言基础学习】系列文章

第一章 《项目与程序结构》
第二章 《数据类型》
第三章 《运算符》
第四章 《流程控制》
第五章 《Vector向量》
第六章 《String字符串》
第七章 《Array数组》
第八章 《函数》
第九章 《指针》
第十章 《结构体》


文章目录

  • 【C++语言基础学习】系列文章
  • 一、String初始化
    • (一)常规初始化
    • (二)cin对象
  • 二、String比较与连接
    • (一)String的比较
    • (二)String的连接
  • 三、String成员函数
  • 四、字符处理


在C++中,string是一个标准库类,用于处理字符串,而string字符串可以看做元素为char的vector。因此,vector的基本操作都适用于string。

一、String初始化

(一)常规初始化

与vector相同,想使用string就必须插入系统库<string>

#include <string>

然后再定义字符串。

string mystring;

唯一不同的是不需要同vector定义时在尖括号中标明类型,其他的初始化方法也完全一样。

#include "test.h"
#include <iostream>
#include <string>using namespace std;void test::Test()
{string s1;string s2(3, 'a');string s3("value");string s4(s3);cout << "s1:" << s1 << endl;cout << "s2:" << s2 << endl;cout << "s3:" << s3 << endl;cout << "s4:" << s4 << endl;
}

返回结果如下。

s1:
s2:aaa
s3:value
s4:value

值得注意的是,在定义string前需要预处理将<string>系统库插入到代码中;另一个则是由于字符串内元素只能是字符,所以重复定义如string s2(3, 'a');中,a必须由单引号括起来,而不能用双引号。

(二)cin对象

在系统库<iostream>中,除了用于标准输出流的std::cout对象,还有std::cin用于标准输入流的对象,通过输入运算符>>可以读取用户输入的数据,并将其存储在程序中的变量中。而定义字符串时,就可以用到这个方法。
使用test.cpp代码实验。

#include "test.h"
#include <iostream>
#include <string>using namespace std;void test::Test()
{string s1;string s2;cout << "请输入字符串s1:" << endl;cin >> s1;cout << "请输入字符串s2:" << endl;cin >> s2;cout << "输出s1结果:" << s1 << endl;cout << "输出s2结果:" << s2 << endl;
}

此时调试整个代码,进入终端。
首先返回结果如下。

请输入字符串s1:

为了实验,此时我们使用键盘在终端中输入55,将55作为元素输入进s1这个字符串中。
输入结果如下。

55

接着,会继续弹出返回结果如下。

请输入字符串s2:

为了实验,此时我们继续使用键盘在终端中输入23,将23作为元素输入进s2这个字符串中。
输入结果如下。

42

此时输出(返回)结果如下。

输出s1结果:55
输出s2结果:23

此时,整个代码运行完毕。所有终端操作如下。

请输入字符串s1:
55
请输入字符串s2:
23
输出s1结果:55
输出s2结果:23

以上的代码使用的cin仅能对固有个数的输入结果向变量进行导入,如果输入数量不确定,而最后将累计输入内容全部输出,可以使用while循环和for循环进行实现。

#include "test.h"
#include <iostream>
#include <vector>
#include <string>using namespace std;void test::Test()
{vector<string> storage;string input;while (cout << "请输入:"){cin >> input;storage.push_back(input);cout << "输出结果:" << endl;for (int i = 0; i < storage.size(); i++){cout << storage[i] << " ";}cout << endl;}
}

这里分别定义了两个变量作为容器,一个是向量storage作为总体储存容器,另一个字符串input作为临时输入储存容器。
在while循环的判定条件中,并没有实际给出一个布尔表达式作为判定条件,而是输出一个“请输入:”的信息作为引导终端用户输入的循环开始提示;进入while循环,用std::cin准备将键盘输入的结果导入到input这个临时输入储存容器中;接着,使用push_back()把在input这个临时输入储存容器的输入结果转移到storage总体储存容器中,再使用for循环来将storage的内容逐个遍历输出出来。
值得注意的是,这里之所以用vector作为总体储存容器是因为vector可以将临时储存在字符串的内容按字符型变量依次再输入到vector中;而如果使用字符串来承接字符串的结果,就没有办法进行自动类型转换从而使得从临时输入储存容器中的内容转换到总体储存容器里。
终端操作结果如下。

请输入:1
输出结果:
1
请输入:3.25
输出结果:
1 3.25
请输入:char
输出结果:
1 3.25 char
请输入:汉
输出结果:
1 3.25 char 汉

从终端操作结果可以看到,在测试了多个类型的输入后,最后输出结果也都是成为了字符串形式。

二、String比较与连接

(一)String的比较

String作为字符串,同样可以被比较。其比较规则如下。

  1. 字符的字典序:字符串的比较从左到右逐个字符进行,根据字符的字典序进行比较。字符的字典序是根据字符的编码值来决定的。
  2. 字符编码:C++使用ASCII码(或其扩展字符集如UTF-8)来表示字符,每个字符都被赋予一个唯一的编码值。在比较字符串时,程序会比较字符的编码值来确定其顺序。
  3. 大小写敏感:C++默认区分大写字母和小写字母。所以,在比较字符串时,大写字母和小写字母被认为是不同的字符。例如,"apple"和"Apple"被认为是不同的字符串。

String可以用比较运算符<>来比较,也可以使用std::string类的成员函数std::string::compare来比较。以下仅使用比较运算符<>进行比较。
使用代码实验,在终端的操作结果如下。

请输入str1:abcde
请输入str2:abcdef
字符串:abcde小于abcdef
请输入str1:abcde
请输入str2:abcdf
字符串:abcde小于abcdf
请输入str1:abcde
请输入str2:abcdE
字符串:abcde大于abcdE

输入各种字符串后,通过比较结果就可以看到,按照从左到右的比较顺序:同长度的字符串ASCII小的字符串小;不同长度的字符串长度短的字符串小;相同字母的字符串小写字母的字符串小。

(二)String的连接

字符串之间可以互相将内容连接,可以使用加法运算符+或者std::string类的成员函数std::string::append来实现。这里仅介绍使用加法运算符的情况。
使用加法运算符+来实现的test.cpp代码如下。

#include "test.h"
#include <iostream>
#include <vector>
#include <string>using namespace std;void test::Test()
{string str1 = "哈哈";string str2 = "55";string str3 = str1 + str2;cout << "字符串连接结果为:"<< str3 << endl;
}

返回结果如下。

字符串连接结果为:哈哈55

三、String成员函数

同Vector容器一样,String字符串在使用时,也提供了许多实用的成员函数来操作和管理字符串(string),以下是常用的std::string的成员函数。

函数描述
length()size()返回字符串的长度
empty()判断字符串是否为空,返回布尔值
clear()清空字符串中的内容
c_str()返回一个以null结尾的C风格字符串(const char* 类型)
substr(pos, len)返回从位置pos开始的len个字符的子字符串
find(str)在字符串中查找子字符串str的出现位置,返回首次出现的位置索引;如果找不到则返回std::string::npos
replace(pos, len, new_str)new_str替换从位置pos开始的len个字符
insert(pos, str)在指定位置pos插入字符串str
erase(pos, len)从指定位置pos开始删除len个字符
push_back(ch)在字符串末尾添加字符ch
pop_back()在字符串末尾删除最后一个字符
compare(str)比较字符串与str的大小关系,返回一个整数表示结果
append(str)将一个字符串追加到另一个字符串的末尾

四、字符处理

ctype.h 是 C 语言标准库中的头文件,其中包含了一些用于字符处理的函数和字符分类宏。这个头文件中定义的函数和宏可以用来对字符进行分类、转换和判断。
字符串可以通过插入这个系统库的内容进行字符处理。

#include <ctype.h>

以下是常用的函数和宏。

函数描述
isalpha(int c)判断字符c是否为字母(a-z 或 A-Z)
isdigit(int c)判断字符c是否为数字(0-9)
isalnum(int c)判断字符c是否为字母或数字
isupper(int c)判断字符c是否为大写字母(A-Z)
islower(int c)判断字符c是否为小写字母(a-z)
isspace(int c)判断字符c是否为空白字符(空格、制表符、换行符等)
toupper(int c)将字符c转换为大写字母
tolower(int c)将字符c转换为小写字母

我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

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

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

相关文章

[word] word保存了但是再打开就没有了怎么办 #职场发展#其他

word保存了但是再打开就没有了怎么办 word保存了但是再打开就没有了怎么办&#xff1f; 一些朋友反映常常找不到自己保存在电脑中的Word的文档&#xff0c;不知道是怎么回事。如果是突然消失的&#xff0c;其实情况还是有很多种&#xff0c;相信大家也有一定的了解。在这里&a…

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法也非常简单。 远程连接到阿里云的 linux服务器后&#xff0c;可以在 ECS 远程连接命令行界面&#xff0c;点击左上角的文件&#xff0c;打开文件树。通过一行命令打包。 在打包后的 Saved.tar 文件上右键&#xff0c;选择 下载文…

【python】python入门(输出)

本篇文章将会介绍关于python的常见输出&#xff0c;希望对您有帮助&#xff01; 输出 用到print函数 print(oh mygod)##或者 print("oh mygod")##或者 print("oh"" ""mygod") 输出结果&#xff1a; 用单引号、双引号都可以 ,引号中可…

下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO

下一代Windows操作系统提前曝光了&#xff1f;&#xff1f; 微软首个为Windows而设的智能体&#xff08;Agent&#xff09; 亮相&#xff1a; 基于GPT-4V&#xff0c;一句话就可以在多个应用中无缝切换&#xff0c;完成复杂任务。整个过程无需人为干预&#xff0c;其执行成功…

【Qt】qt常用控件之QIcon 以及 qrc机制设置图片路径(QtCreator)

文章目录 1. QIcon / windowIcon2. setIcon() 与 setwindowIcon()2.1 setIcon() 介绍与使用2.2 setWindowIcon 介绍与使用 3. 路径问题 & qrc机制的引入3.1 绝对路径 / 相对路径 的问题3.2 qrc机制3.3 在QtCreator下利用qrc机制引入图片 1. QIcon / windowIcon QIcon QIco…

PR:时间重映射

做一个变换视频速度的效果 原片如下&#xff1a; 现在将跑步的人中间一段加速&#xff0c;后面一段减速 操作如下&#xff1a; 此处点击关键帧时&#xff0c;可以用钢笔工具&#xff0c;也可以按住Ctrl键点击 操作后效果如下&#xff1a;

Write operation failed: computed value is readonly问题解决

源代码&#xff1a; // 封装倒计时逻辑函数 import { computed, ref } from vue import dayjs from dayjs export const useCountDown () > {// 1.响应式数据const time ref(0)// 格式化时间const formatTime computed(()>dayjs.unix(time.value).format(mm分ss秒))/…

最短路径与关键路径

目录 文章目录 前言 一.最短路径 1.基本概念 1.1什么是源点&#xff1f; 1.2什么是最短路径 2.作用 3.迪杰斯特拉算法 4. 弗洛伊德算法 4.1过程演示 二.拓扑排序 1.基本概念 1.1什么是有向无环图 1.2什么是活动 1.3什么是AOV网 1.4什么是拓扑序列 1.5什么是拓扑…

Ubuntu 23.10通过APT安装Open vSwitch

正文共&#xff1a;888 字 8 图&#xff0c;预估阅读时间&#xff1a;1 分钟 先拜年&#xff01;祝各位龙年行大运&#xff0c;腾跃展宏图&#xff01; 之前在介绍OpenStack的时候介绍过&#xff08;什么是OpenStack&#xff1f;&#xff09;&#xff0c;OpenStack是一个开源的…

Python slice函数

在Python编程中&#xff0c;slice&#xff08;切片&#xff09;操作是一种强大且灵活的方式&#xff0c;用于从序列&#xff08;如列表、元组、字符串等&#xff09;中获取子序列。通过切片操作&#xff0c;可以轻松地提取序列中的一部分&#xff0c;进行遍历、修改、复制等操作…

指针习题回顾(C语言)

目录 数组指针和指针数组 编程题&#xff1a; 字符串逆序 字符串左旋 题目1概述&#xff1a; 代码实现&#xff1a; 题目2概述&#xff1a; 代码实现&#xff1a; 调整奇偶顺序 题目概述&#xff1a; 代码实现&#xff1a; 冒泡排序 二级指针 代码解读&#xff1a; …

【AIGC】Stable Diffusion的插件入门

一、上文中作者使用插件包的方式下安装插件&#xff0c;用户也可以从Stable Diffusion的界面安装插件&#xff0c;如下图所示&#xff0c;在相应的插件后面点安装按钮。 二、介绍一些比较好用的插件 “adetailer” 插件是 Stable Diffusion 中的一个增强功能&#xff0c;旨在提…

【Pygame手册02/20】pygame模块display控制窗口和屏幕

目录 一、说明二、pygame.display接口函数2.1 函数表格2.2 pygame.display的功能 三、详细的函数调用3.1 pygame.display.init()3.2 pygame.display.quit()3.3 pygame.display.get_init()3.4 pygame.display.set_mode()3.5 pygame.display.get_surface()3.6 pygame.display.fl…

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建&#xff1a;在创建阶段&#xff0c;你需要选择一个镜像来运行你的应用。这个镜像可以是公开的&#xff0c;如 Docker Hub 上的镜像&#xff0c;也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…

【AIGC】Stable Diffusion的采样器入门

在 Stable Diffusion 中&#xff0c;采样器&#xff08;Sampler&#xff09;是指用于生成图像的一种技术或方法&#xff0c;它决定了模型如何从潜在空间中抽样并生成图像。采样器在生成图像的过程中起着重要作用&#xff0c;影响着生成图像的多样性、质量和创造性。以下是对 St…

为自监督学习重构去噪扩散模型

在这项研究中&#xff0c;作者检验了最初用于图像生成的去噪扩散模型&#xff08;DDM&#xff09;的表示学习能力。其理念是解构DDM&#xff0c;逐渐将其转化为经典的去噪自动编码器&#xff08;DAE&#xff09;。这一解构过程让大家能够探索现代DDM的各个组成部分如何影响自监…

python自学...

一、稍微高级一点的。。。 1. 闭包&#xff08;跟js差不多&#xff09; 2. 装饰器 就是spring的aop 3. 多线程

《合成孔径雷达成像算法与实现》Figure6.17

% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …

linux系统配置zabbix监控agent端

目录 客户端配置 启动服务 浏览器工具设置 创建主机群组 创建主机 创建监控项 ​编辑 ​编辑 创建触发器 查看监控 客户端配置 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # yum clean allyum install -y zab…

RCS系统之:浅谈系统设计与开发

这是我在开发RCS系统中的一些个人感悟与心得&#xff0c;写出来与大家一起分享下。是想到什么写到什么&#xff0c;如果有什么不对的&#xff0c;欢迎大家一起探讨。 有些人喜欢把WMS系统下面的系统统称为RCS系统。 但我不是这么想的&#xff0c;我这里把WMS/ERP系统与AGV之间…