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,关注后即可获取最新文章推送

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

C++ 字符串完全指南:学习基础知识到掌握高级应用技巧的更多相关文章

  1. Matrix学习——基础知识

    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...

  2. JAVA学习基础知识总结(原创)

    (未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...

  3. Python学习-基础知识-2

    目录 Python基础知识2 一.二进制 二.文字编码-基础 为什么要有文字编码? 有哪些编码格式? 如何解决不同国家不兼容的编码格式? unicode编码格式的缺点 如何既能全球通用还可以规避uni ...

  4. ansible学习基础知识和模块(一)

    基础知识补充: 常用自动化运维工具 Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台.与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用 ...

  5. C# 基础知识和VS2010的小技巧总汇(2)[转]

    1.使用关键字readonly ,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值 2..net4.0新增一个  Tuple 类,代表一个有序的N元组.可以调用Tuple.Create ...

  6. C# 基础知识和VS2010的小技巧总汇

    看了一些基础视频,才发现自己的基础比较薄弱,有很多基础知识都不知道.这里总汇一些基础知识. 1: foreach不仅可以作用于list类的索引集合,还可以遍历dictionary类,这一点比for更简 ...

  7. IOS科研IOS开发笔记学习基础知识

    这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...

  8. MySQL学习基础知识1

    什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...

  9. Java学习---基础知识学习

    2016-07-23  周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4]  ;  只有4个数字BufferedRead ...

  10. latex学习--基础知识

    1 文档结构 文档类.序言.正文 这三部分的基本语法如下: 文档类常用选项 标题.摘要.章节 目录 2 文字排版 字符输入 换行.换页.断字 字样.字号 3 常用命令环境 列表 对齐 摘录 原文照排 ...

随机推荐

  1. vue 前端自动打开文件地址进行下载

    最近在做异步导出的功能,导出的过程中前端另外启动一个查询导出进度的线程接口.如果导出完成后,把生成的文件上传到服务器,返回给前端一个文件的下载地址:前端自动打开这个地址进行跳转下载. 有两种方式 1. ...

  2. Html飞机大战(十一): 飞机撞毁爆炸

    好家伙,这篇写英雄撞机爆炸   我们先把子弹销毁弄上去 子弹穿过敌机,敌机爆炸后消失,子弹同样也应该销毁,(当然后续会考虑穿甲弹)   然后我们还要把主角碰撞爆炸检测也加上去   因为他们共用一个思路 ...

  3. 【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误

    问题描述 使用VS Code创建Python Function,处理Event Hub中的数据.当部署到Azure Function App后,函数无法执行,查看 Function 日志出现 Valu ...

  4. go grpc流式和非流式的例子

    参考grpc官方:  https://grpc.io/docs/quickstart/go.html 或官方中文翻译: http://doc.oschina.net/grpc?t=60133 安装pr ...

  5. Java --- 多线程 创建线程的方式四: 使用线程池

    1 package bytezero.thread2; 2 3 import java.security.Provider; 4 import java.util.concurrent.Executo ...

  6. Java 值传递+引用传递

    1 /* 2 * 3 * 方法的形参的传递机制:值传递 4 * 5 * 1.形参:方法定义时,声明的小括号内的参数 6 * 实参:方法调用时,实际传递给形参的数据 7 * 8 * 9 * 2.值传递的 ...

  7. vmware完全卸载 防止出现各种问题治标不治本

    首先打开系统盘根目录,搜索" VMware ",把搜到的都删掉,去控制面板那里卸载掉VMware 打开管理(右键"我的电脑"),管理打开设备管理器," ...

  8. Sagas论文原文读后总结

    一.引子 分布式事务组件seata最近社区很活跃,刚好公司有对接seata的计划.刚好借此机会,彻底了解下seata的价值.其中有一个比较特殊的模式叫SAGA模式,听起来就很懵逼,按照官网的介绍起源于 ...

  9. 时间同步 ntp服务器

    目录 一. 定义 二. 项目要求 三. 部署服务端 四. 部署客户端 一. 定义 #01 简介:ntp全名 network time protocol .NTP服务器可以为其他主机提供时间校对服务 # ...

  10. 【python】使用百度api进行音频文件转写

    [python]使用百度api进行音频文件转写 脚本目标: 智能云的音频文件转写文档只给了个demo,每次只能传1分钟以内的音频啥的,不好直接用,简单打包一下,做到把音频放文件夹,直接出转写结果就行了 ...