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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧的更多相关文章
- Matrix学习——基础知识
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...
- JAVA学习基础知识总结(原创)
(未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- Python学习-基础知识-2
目录 Python基础知识2 一.二进制 二.文字编码-基础 为什么要有文字编码? 有哪些编码格式? 如何解决不同国家不兼容的编码格式? unicode编码格式的缺点 如何既能全球通用还可以规避uni ...
- ansible学习基础知识和模块(一)
基础知识补充: 常用自动化运维工具 Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台.与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用 ...
- C# 基础知识和VS2010的小技巧总汇(2)[转]
1.使用关键字readonly ,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值 2..net4.0新增一个 Tuple 类,代表一个有序的N元组.可以调用Tuple.Create ...
- C# 基础知识和VS2010的小技巧总汇
看了一些基础视频,才发现自己的基础比较薄弱,有很多基础知识都不知道.这里总汇一些基础知识. 1: foreach不仅可以作用于list类的索引集合,还可以遍历dictionary类,这一点比for更简 ...
- IOS科研IOS开发笔记学习基础知识
这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...
- MySQL学习基础知识1
什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...
- Java学习---基础知识学习
2016-07-23 周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4] ; 只有4个数字BufferedRead ...
- latex学习--基础知识
1 文档结构 文档类.序言.正文 这三部分的基本语法如下: 文档类常用选项 标题.摘要.章节 目录 2 文字排版 字符输入 换行.换页.断字 字样.字号 3 常用命令环境 列表 对齐 摘录 原文照排 ...
随机推荐
- Vue源码学习(十):关于dep和watcher使用的一些思考
好家伙, 前面想了好久,都没想明白为什么要dep和watcher打配合才能实现数据-视图同步 为什么要多一个依赖管理这样的东西 给每个数据绑个watcher(xxfunction),然后,数据变了 ...
- 【Azure App Service】如何来停止 App Service 的高级工具站点 Kudu ?
问题描述 如何来停止 App Service 的高级工具站点 Kudu ? kudu 介绍 Kudu 提供了一组面向开发人员的工具和扩展点,用于您的应用服务应用程序. Kudu (Advanced T ...
- 【Azure Function App】遇见无法加载Microsoft.Azure.WebJobs.ParameterBindingData的问题
问题描述 新部署Azure Funciton代码,遇见无法加载 "Microsoft.Azure.WebJobs.ParameterBindingData" 问题 错误消息:Mic ...
- C语言趣味编程之三天打鱼两天晒网
include <stdio.h> typedef struct date {//定义一个日期结构体date,三个成员变量year\month\day,使得年月日作为一个整体,相互联系. ...
- git reset --soft HEAD^^ 项目提交代码冲突 提交当前merge后,别提交远程,用命令回滚2次,到未提交的版本,再拉取同事代码,冲突解决
git reset --soft HEAD^^ 项目提交代码冲突 提交当前merge后,别提交远程,用命令回滚2次,到未提交的版本,再拉取同事代码,冲突解决 当多人写一个项目,最好还是关掉vscode ...
- GO 语言的并发编程相关知识点简介与测试【GO 基础】
〇.什么是协程 Coroutines ? 进程和线程太常见,本文就不再赘述了,直接一起看下什么是协程.如下图,先看下协程的定位: 关于用户空间和内核空间:进程运行起来就涉及到对内存资源的管理,然而内存 ...
- 【easy52pojie】一款方便看吾爱论坛帖子的爬虫程序
众所周知吾爱论坛一页最多显示十来条回帖,且间隔很大,每页的信息密度太低了.在帖子很庞大的情况下,一页一页翻页,着实有点痛苦. 故简单敲敲代码,使用request xpath技术做了一个论坛帖子回复查看 ...
- 逆向通达信Level-2 续三 (KTL python控制台动态调试)
python控制台逆向分析. python 跟 js 自如切换 逆向通达信Level-2 续十一 (无帐号登陆itrend研究版) 逆向通达信Level-2 续十 (trace脱壳) 逆向通达信Lev ...
- jquery之获取某个元素上的事件
jquery的给元素绑定的事件可以用data方法取出来 通过$(element).data("events")来获取 // 比如给一个button绑定两个click事件 $(&qu ...
- Android Studio源码导入与调试
从事Android开发都需要涉及到Android源码的阅读,特别是系统应用或者Framework开发,读代码的时间远远比写代码的时间更多. 一. 生成iml与ipr 在Android Studio中导 ...