C++ 字符串完全指南:学习基础知识到掌握高级应用技巧

C++ 字符串

字符串用于存储文本。

一个字符串变量包含由双引号括起来的一组字符:

示例

创建一个 string 类型的变量并为其赋值:

string greeting = "Hello";

C++ 字符串连接

字符串连接可以使用 + 运算符来实现,生成一个新的字符串。

示例:

string firstName = "John ";
string lastName = "Doe";
string fullName = firstName + lastName;
cout << fullName;

在上面的示例中,我们在 firstName 后面添加了一个空格,以便在输出时在 “John” 和 “Doe” 之间生成一个空格。然而,你也可以用引号(" "' ') 来添加一个空格:

示例:

string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;
cout << fullName;

追加:

在 C++ 中,字符串实际上是一个对象,其中包含可以对字符串执行某些操作的函数。例如,你也可以使用 append() 函数连接字符串:

示例:

string firstName = "John ";
string lastName = "Doe";
string fullName = firstName.append(lastName);
cout << fullName;

C++ 数字和字符串

将数字和字符串相加

C++ 使用 + 运算符既用于加法又用于连接。

  • 数字相加。字符串连接。

如果你将两个数字相加,结果将是一个数字:

示例:

int x = 10;
int y = 20;
int z = x + y;      // z 将是 30(一个整数)

如果你将两个字符串相加,结果将是字符串连接:

示例:

string x = "10";
string y = "20";
string z = x + y;   // z 将是 1020(一个字符串)

如果你尝试将一个数字添加到一个字符串中,将会出现错误:

示例:

string x = "10";
int y = 20;
string z = x + y;

C++ 字符串长度

要获取字符串的长度,可以使用 length() 函数:

示例

string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "txt 字符串的长度为: " << txt.length();

提示:你可能会看到一些 C++ 程序使用 size() 函数来获取字符串的长度。这只是 length() 的别名。完全取决于你是要使用 length() 还是 size():

示例

string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "txt 字符串的长度为: " << txt.size();

C++ 访问字符串

你可以通过在方括号 [] 内引用其索引号来访问字符串中的字符。

以下示例打印 myString 中的第一个字符:

示例

string myString = "Hello";
cout << myString[0];
// 输出 H

注意:字符串的索引从 0 开始:[0] 是第一个字符,[1] 是第二个字符,以此类推。

以下示例打印 myString 中的第二个字符:

示例

string myString = "Hello";
cout << myString[1];
// 输出 e

更改字符串字符

要更改字符串中特定字符的值,请引用索引号,并使用单引号:

示例

string myString = "Hello";
myString[0] = 'J';
cout << myString;
// 输出 Jello 而不是 Hello

C++ 特殊字符

因为字符串必须用引号括起来,C++会误解这个字符串,并生成一个错误:

string txt = "We are the so-called "Vikings" from the north.";

避免这个问题的解决方案是使用反斜杠转义字符。

反斜杠 () 转义字符将特殊字符转换为字符串字符:

转义字符 结果 描述
’ ’ 单引号
" " 双引号
\ \ 反斜杠
序列 " 在字符串中插入双引号:

string txt = "We are the so-called \"Vikings\" from the north.";

序列 ’ 在字符串中插入单引号:

string txt = "It\'s alright.";

序列 \ 在字符串中插入单个反斜杠:

string txt = "The character \\ is called backslash.";

C++ 用户输入字符串

可以使用提取运算符 >> 在 cin 上存储用户输入的字符串:

string firstName;
cout << "Type your first name: ";
cin >> firstName; // 从键盘获取用户输入
cout << "Your name is: " << firstName;// 输入你的名字: John
// 你的名字是: John

然而,cin 将空格(空白、制表符等)视为终止字符,这意味着它只能存储一个单词(即使你输入多个单词):

string fullName;
cout << "Type your full name: ";
cin >> fullName;
cout << "Your name is: " << fullName;// 输入你的全名: John Doe
// 你的名字是: John

从上面的示例中,你会期望程序打印出 “John Doe”,但它只打印出 “John”。

这就是为什么在处理字符串时,我们经常使用 getline() 函数来读取一行文本。它以 cin 作为第一个参数,字符串变量作为第二个参数:

string fullName;
cout << "Type your full name: ";
getline(cin, fullName);
cout << "Your name is: " << fullName;// 输入你的全名: John Doe
// 你的名字是: John Doe

C++ 字符串命名空间

你可能会看到一些 C++ 程序在没有标准命名空间库的情况下运行。可以省略 using namespace std 这一行,并将其替换为 std 关键字,后面跟着 :: 运算符用于 string(和 cout)对象:

例子

#include <iostream>
#include <string>int main() {std::string greeting = "Hello";std::cout << greeting;return 0;
}

你可以选择是否包含标准命名空间库。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

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

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

相关文章

spikingjelly学习-使用单层全连接snn脉冲神经网络识别mnist数据集

连接【https://spikingjelly.readthedocs.io/zh-cn/0.0.0.0.14/activation_based/lif_fc_mnist.html】 【训练代码的编写需要遵循以下三个要点&#xff1a; 脉冲神经元的输出是二值的&#xff0c;而直接将单次运行的结果用于分类极易受到编码带来的噪声干扰。因此一般认为脉冲…

逆向工程-Nag.exe

初步分析 首先&#xff0c;打开文件&#xff0c;进行文件初步探索。 然后&#xff0c;点击OK发现删除本界面并跳转到新的界面&#xff0c;并且需要我们去除弹出的窗口。 正式分析 拖拽进IDA Pro 和OllyDbg中进行分析。 根据我们初步测试的结果&#xff0c;我们知道一个重要线索…

LeetCode-热题100:153. 寻找旋转排序数组中的最小值

题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次…

Vercel应用绑定自己的域名

准备域名 首先购买自己的域名&#xff0c;可以选择以下渠道进行购买&#xff1a; NamesiloGodaddy腾讯云阿里云 另外你还可以选择从以下平台获取到免费的域名&#xff1a; Freenomeu.org 欧盟组织的免费域名, 需要英国的用户信息才能注册; 在我看来免费的才是最贵的&#…

Rsyslog 日志集中管理实验

1.使用 进行日志集中管理 C/S 架构&#xff1a;客户端将其日志上传到服务器端&#xff0c;通过对服务器端日志的查询&#xff0c;来实现对其他客户端的日志进行集中管理 2.两台机器&#xff1a; &#xff08;server&#xff09;host-5(192.168.1.2)<------------>(192…

一招让你的薪水暴增,每个程序员都应该学会跟老板提加薪

为什么要学会薪资谈判&#xff1f; 在最近的一篇文章中&#xff0c;职业专家奥斯汀贝尔卡克 (Austin Belcak ) 解释了进行一点薪资谈判如何对您的长期收入产生巨大影响。 这是奥斯汀在他的薪资谈判示例中描绘的场景&#xff1a; Amari 和 Taylor 的年薪均为 50,000 美元 未来…

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解

往期回顾&#xff1a; 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号-CSDN博客 【QT入门】 Qt内存管理机制详解-CSDN博客 【QT入门】 Qt代码创建布局之水平布局、竖直布局详解 先看两个问题&#xff1a; 1、ui设计器设计界面很方便&#xf…

ffmpeg命令行

ffmpeg 如果要在linux gdb 调试&#xff0c;需要在configure 时候不优化 开启调试 ./configure --enable-debug --disable-optimizations make如何开启gdb 调试 gdb ffmpeg_gset args -i test.hevc -c:v copy -c:a copy output_265.mp4rh264 的流生成mp4 文件&#xff0c;不转…

spring-boot-devtools配置和原理

一、前言 昨天&#xff0c;一个同事Eclipse在启动SpringBoot项目时一直不停地加载&#xff0c;后来发现是因为spring-boot-devtools造成的问题&#xff0c;因为我们把日志输出的目录设置在当前项目里&#xff08;~/mnt/logs/&#xff0c;这样设置是因为mac电脑没有根目录权限&…

摸鱼工具—终端热搜榜,实在是上班摸鱼必备之工具,妙啊

本文介绍我用Python语言开发的热搜榜&#xff0c;聚合有百度、头条、微博、知乎和CSDN等网站热搜信息。该工具运行于终端中&#xff0c;比如cmder、powershell或者git bash等&#xff0c;实在是上班、摸鱼之必备工具。 —、工具执行效果 1.1 项目代码 项目代码地址存在gitee中…

Linux用户及用户组权限

一、用户和用户组 功能项命令实例作用用户组cat /etc/group查看当前系统存在的用户组groupadd testing添加一个新的用户组testingcat /etc/group查看组是否被新增成功groupmod -n test testing将testing重命名成testgroupdel test删除组testgroups root查看用户root所在的所有…

linux centos7中使用 Postfix 和Dovecot搭建邮件系统

作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; Postfix Postfix是一个开源的邮件传输代理&#xff08;MTA&#xff09;&#xff0c;用于路由和传送电子邮件。它是一个可靠、安全且高性能的邮件服务器软件&#xff0c;常用于搭建邮件系统的核心…

html音频和视频可输入表单input

音频和视频 loop循环播放autoplay自动播放controls显示控制面板<audio src""> //<video src"#">muted静音播放 可输入表单input password密码框 radio单选框 checkbox复选框 file上传文件 text文本框 文本框<input type"text"…

STM32+ESP8266水墨屏天气时钟:简易多级菜单(数组查表法)

项目背景 本次的水墨屏幕项目需要做一个多级菜单的显示&#xff0c;所以写出来一起学习&#xff0c;本篇文章不单单适合于水墨屏&#xff0c;像0.96OLED屏幕也适用&#xff0c;区别就是修改显示函数。 设计思路 多级菜单的实现&#xff0c;一般有两种实现的方法 1.通过双向…

【ZigBee/ZStack快速入门】04-1-协议栈串口回调函数(接收数据)

弄了两天终于让我试出来了 参考了大佬的代码&#xff0c;大佬的代码只能存放64个数&#xff0c;但是我的需求要高一点&#xff0c;所以在大佬的基础上改了一下&#xff0c;先放上代码&#xff0c;后面再分析 void SampleApp_CallBack(uint8 port, uint8 event) {uint8 UART0_R…

云贝教育 |【技术文章】pg_bulkload介绍

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 pg_bulkload 是一个高性能的数据加载工具&#xff0c;专门为PostgreSQL数据库设计&#xff0c;用于大批量数据的快速导入。pg_bulk…

【MySQL】MySQL小结

MySQL数据库的基本信息 数据&#xff1a;记录事物的信息 表&#xff1a;数据的集合&#xff0c;由行和列组成&#xff1b;将多条数据组合在一起 数据库&#xff1a;是表的集合&#xff0c;是存储以统一格式且相互有关数据的仓库 DBMS的主要功能&#xff1a;1.数据库的建立和维…

JetPack之DataBinding基础使用

目录 一、简介二、使用2.1 使用环境2.2 xml文件绑定数据2.3 数据绑定的对象2.3.1 object2.3.2 ObseravbleField2.3.3 ObseravbleCollection 2.4 绑定数据 三、应用场景 一、简介 DataBinding是谷歌15年推出的library,DataBinding支持双向绑定&#xff0c;能大大减少绑定app逻辑…

【C语言】huffman编码实现数据压缩

目录 原理类型定义完整代码实验无重复数据的压缩情况有重复数据的压缩情况数据中只有一种字符的情况 原理 huffman统计数据中字符的出现次数&#xff0c;根据每个字符的出现次数来编码&#xff0c;出现次数越多的数据使用越短的编码长度&#xff0c;从而实现数据压缩的目的。 …

如何利用InternLM2的开源大型语言模型编写代码解释的agent

InternLM2作为一个开源的大型语言模型&#xff0c;具备了强大的编码能力和长文本处理能力&#xff0c;同时也在工具调用方面有所探索。要利用InternLM2编写代码解释的agent&#xff0c;可以依据文章中提及的“Tool-Augmented LLMs”部分进行设计。这部分探讨了如何通过特定的方…