C++初学者指南第一步---11.字符串(基础)

news2025/1/19 2:21:54

C++初学者指南第一步—11.字符串(基础)

文章目录

  • C++初学者指南第一步---11.字符串(基础)
    • 1. std::string
    • 2. char = std::string的元素类型
    • 3. std::string字符串操作
    • 4. 字面量
      • 4.1 C风格字符串字面量
      • 4.2 "std::string 字面量"s (C++14)
      • 4.3 字面量拼接
      • 4.4 原始字符串字面量
    • 5. 类似字符串的函数参数
    • 6. std::getline 库函数

1. std::string

  • char类型的动态数组(类似于 vector)。
  • 可以使用"+“或”+="连接。
  • 使用下标[索引]方式进行单字符访问。
  • 可修改的(“可变的”)与 Python 或 Java 中不同。
  • 常规的:可深度复制,可深度比较。
#include <string>
std::string hw = "Hello";
std::string s = hw;     // copy of hw
hw += " World!";
cout << hw << '\n';     // Hello World!
cout << hw[4] << '\n';  // o
cout << s << '\n';      // Hello

运行上面代码

2. char = std::string的元素类型

  • 一个char可以容纳一个字符
  • char是最小整数类型(通常为 1 字节)
  • 字符必须用单引号括起来:‘a’, ‘b’, ‘c’, …
char c1 = 'A';   
char c2 = 65;  // ASCII code of 'A'
cout << c1 << '\n';          // A
cout << c2 << '\n';          // A
cout << (c1 == c2) << '\n';  // 1
std::string s = "xyz"; 
s[1] = c1;
cout << s << '\n';           // xAz
s += c2;
cout << s << '\n';           // xAzA

运行上面代码

特殊字符(反斜杠 \ 用作转义字符)

特殊字符说明示例
\n换行符“Line1\nLine1\nLine3”
\ttab制表符“Column1\tColumn1\tColumn3”
\’单引号“he said ‘quote’ to me”
\\反斜杠“C:\\Users\me\\hello.cpp”

3. std::string字符串操作

在这里插入图片描述
std::string接口速查表
在这里插入图片描述

4. 字面量

'a' // 字符型字面量

4.1 C风格字符串字面量

auto a = "seven of";  // a的类型是 char const[]
auto b = a;           // b 指的是与 a 相同的对象
a += " nine";            //  编译错误:不能修改
auto c = "al" + "cove";  //  编译错误
std::string s = a;    // a 被拷贝进 s
s += " nine";         //  正确(s 是 std::string)

运行上面代码

4.2 "std::string 字面量"s (C++14)

#include <string>
using namespace std::string_literals;
auto s1 = "seven of"s;  // s1的类型是 std::string
auto s2 = s1;           // s2 是 s1的拷贝
s1 += " nine";          // 
cout << s1 << '\n';     // seven of nine
cout << s2 << '\n';     // seven of
auto s3 = "uni"s + "matrix"s;  // 
cout << s3 << '\n';     // unimatrix

运行上面代码

4.3 字面量拼接

只有被空白字符分隔的字符串字面量会被连接起来:

"first" "second"  ⇒  "first second"
std::string s = 
  "This is one literal"
  "split into several"
  "source code lines!";

4.4 原始字符串字面量

优势:可以使用特殊字符而无需转义

R"(raw "C"-string c:\users\joe)"	          char const[]	C++11
R"(raw "std"-string c:\users\moe)"s	          std::string   C++14
语法: R"DELIMITER(characters…)DELIMITER"

DELIMITER(定界符,用于表明字符串的开始和结束)可以是0到16个字符的序列,但不能包含空格、(、)和\。

5. 类似字符串的函数参数

注意:std::string_view被用于只读参数(C++17)

  • 轻量级(= 复制成本低,可以按值传递)
  • 非所有者(= 不负责分配或释放内存)
  • 只读视图(= 不允许修改目标字符串)
  • 字符串类似对象(std::string / “literal” / …)
  • 主要用例:只读的函数参数
#include <string>
#include <string_view>
int edit_distance (std::string_view s1, std::string_view s2) { … }
std::string input = "abx";
int dist = edit_distance("abc", input);
  • 在将字符串字面量传递给函数时,避免使用开销很大的临时字符串
  • 通过避免一层间接访问,可以加快访问速度:
    在这里插入图片描述
如果你…使用的参数类型
在函数里总是需要一个输入字符串的拷贝。std::string “按值传递”
想要只读访问:
不需要(总是)复制
使用C++17或C++20
#include <string_view>
std::string_view
想要只读访问:
不需要(总是)复制
使用C++98或C++11
std::string const&
“用常量引用传递参数”
想要函数修改字符串
应该尽量避免这样的输出参数
std::string &
传递std::string的(非常量)引用

6. std::getline 库函数

  • 一次读取整行/整块文本
  • 目标字符串可以重复使用(节省内存)
std::string s;
getline(std::cin, s);        // 读取整行
getline(std::cin, s, '\t');  // 读取直到遇到tab结束
getline(std::cin, s, 'a');   // 读取直到遇到'a'结束

附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

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

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

相关文章

河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!

河南大学&#xff08;Henan University&#xff09;&#xff0c;简称“河大”&#xff0c;是河南省人民政府与中华人民共和国教育部共建高校&#xff0c;国家“双一流”建设高校&#xff0c;入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…

DBeaver通过jdbc方式连接ES(免证书)

前言 之前其实已经分享过DBeaver连接ES,为什么重新分享一篇,用过的肯定知道,之前那种方式需要ES服务的服务器上装证书,免费证书只能用一个月。这次分享的就是解决这个时间限制问题,但是需要用一个自己开发的jar,而且暂未上到maven的中心库。 一、先看效果 证书方式 自研…

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器&#xff08;factor detector&#xff09;2.4 生态探测器&#xff08;ecological detector&#xff09;2.5 交互因子探测器&#xff08;interaction dete…

labelme 标注岩石薄片数据集流程

labelme 数据标注使用流程 1.打开anaconda环境2.打开labelme工具3.打开数据集文件夹4.开始标注5. 标注完成6. 修改labels.txt文件7. 将标注结果可视化8. 完成json转图片9. 全部命令总结 1.打开anaconda环境 2.打开labelme工具 输入下列两条命令&#xff0c;打开labelme工具 &a…

Type-C诱骗芯片LDR6500

随着科技的飞速发展&#xff0c;电子设备的智能化和便携化已成为趋势。在这个过程中&#xff0c;Type-C接口因其高速传输、正反可插以及强大的扩展能力&#xff0c;逐渐成为主流接口标准。然而&#xff0c;Type-C接口的广泛应用也带来了一系列挑战&#xff0c;其中之一便是如何…

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化&#xff1f;如何选择邮件推送服务&#xff1f; 云邮件推送服务是一种基于云计算的邮件发送解决方案&#xff0c;能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务&#xff0c;以便你能够充分利用其优势。 云邮件推…

[保姆级教程]uniapp自定义导航栏

文章目录 导文隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 添加自定义导航栏视图&#xff1a;手写导航栏组件导航栏 导文 在 UniApp 中&#xff0c;自定义导航栏通常涉及到隐藏默认的导航栏&#xff0c;并在页面顶部添加自定义的视图组件来模拟导航栏的功能。 隐藏默认导航…

VBA语言専攻T3学员领取资料通知

各位学员∶本周MF系列VBA技术资料增加631-635讲&#xff0c;T3学员看到通知后请免费领取,领取时间6月21日晚上19:00-6月22日晚上20:00。本次增加内容&#xff1a; MF631:提取某列数据的唯一值 MF632:自动调整文本并旋转到90度 MF633:仅复制格式 MF634:Mod运算判断奇数偶数 …

cef内核最近使用的体会低版本vs编译下载嵌入的体会

文章目录 前言1、cef简介和下载编译2、嵌入到工程框架中遇到的问题 3、VisualStudio2017、2019编译4、如何使用编译好的库以及相关动态文件5、注意6、常见问题7、cef的通信及同步调用JS 前言 最近一段时间忙着把浏览器内核框架中的cef框架更新到新版本&#xff0c;以及最近对于…

rttys服务器和客户端

rttys服务器 1.下载 https://github.com/zhaojh329/rttys/releases2.解压运行 libev交叉编译 cd libev ./configure --hostarm-linux CCaarch64-poky-linux-gcc --prefix/home/michael/rtty_install make install DESTDIR/home/michael/rtty_installrtty客户端 1.git地…

python测试工程师 之 unittest框架总结

unittest 学习目标unittest 框架的基本使⽤⽅法(组成)断⾔的使⽤ (让程序⾃动的判断预期结果和实际结果是否相符)参数化(多个测试数据, 测试代码写⼀份 传参)⽣成测试报告 复习pythonunittest 框架的介绍核⼼要素(组成)1. TestCase 测试⽤例, 这个测试⽤例是 unittest 的组成部…

2024亚马逊Prime Day备战攻略:卖家要做好这些准备!

2024年的Prime Day是亚马逊的第十个会员日&#xff0c;对卖家而言&#xff0c;Prime Day不仅仅是一次简单的促销活动&#xff0c;更是一个可以提升销售业绩、增强品牌影响力并加深与消费者关系的黄金机会。肯定还有不少卖家在为活动做准备&#xff0c;今天就为大家准备了一份全…

奔驰EQS SUV升级原厂主动式氛围灯效果展示

以下是一篇关于奔驰 EQs 升级原厂主动氛围灯案例的宣传文案&#xff1a; 在汽车科技不断演进的今天&#xff0c;我们自豪地为您呈现奔驰 EQs 升级原厂主动氛围灯的精彩案例。 奔驰 EQs&#xff0c;作为豪华电动汽车的典范&#xff0c;其卓越品质与高端性能有目共睹。而此次升…

ADC + 数码管显示

REVIEW 前面已经学习过&#xff1a; ADC&#xff1a;ADC模-数转换原理与实现-CSDN博客 key&#xff1a;基于状态机的按键消抖实现-CSDN博客 数码管&#xff1a;SPI接口的74HC595驱动数码管实现_用spi和hc74595通信-CSDN博客 1. 今日摸鱼计划 按键启动ADC 将结果显示在数码管…

Reddit、Discord等社媒网站抓取总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践&#xff0c;这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前&#xff0c;让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中…

2024.6.23周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、网络架构 四、创新点 五、文章解读 1、Introduction 2、Method 3、实验 4、结论 二、代码实验 总结 摘要 本周阅读了一篇题目为NAS-PINN: NEURAL ARCHITECTURE SEARCH-GUIDED PHYSICS-INFORMED NEURAL N…

【vLLM】核心技术PagedAttention,调度原理

vLLM 简介 来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟(Virtual)内存和分页(Page)技术&#xff0c;提出了一个新的注意力算法 PagedAttention&#xff0c;并打造了一个LLM服务系统——vLLM&#xff0c;官网为&#xff1a;http…

OS复习笔记ch11-4

磁盘调度 磁盘的物理结构 经典的温彻斯特盘 其中的几个概念&#xff1a; 盘面&#xff1a;可以看成是一个操场的平面&#xff0c;不同的盘面通过中间的轴串在一起磁道&#xff1a;磁道可以看成是操场的跑道&#xff0c;我们知道操场上有外道和内道&#xff0c;最内道中间往…

【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】

本文主要讲述使用MindOpt工具优化FlowShop流水线作业排班的数学规划问题。 一、案例场景 FlowShop流水线作业排班也有称为生产下料问题&#xff0c;它涉及到多台机器、多个工序以及多个作业调度安排。在这个问题中&#xff0c;我们需要对多个作业在一组流水线上的处理顺序进行…

矩阵中严格递增的单元格数

题目链接&#xff1a;leetcode:矩阵中严格递增的单元格数 描述 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat&#xff0c;你可以选择任一单元格作为 起始单元格 。 从起始单元格出发&#xff0c;你可以移动到 同一行或同一列 中的任何其他单元格&#xff0c;但前提是目…