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

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.mzph.cn/web/31547.shtml

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

相关文章

【论文复现|智能算法改进】改进麻雀算法的无人机三维路径规划

目录 1.UAV路径规划数学模型2.改进点3.结果展示4.参考文献5.代码获取 1.UAV路径规划数学模型 【智能算法应用】蜣螂优化算法DBO求解UAV路径规划 2.改进点 Logistics混沌映射 X n 1 μ X n ( 1 − X n ) , X n ∈ ( 0 , 1 ) (1) X_{_{n1}} \mu X_{_n}( 1 - X_{_n} ) ,\qua…

Vulnhub——AI: WEB: 1

渗透复现 &#xff08;1&#xff09;目录扫描爆破出隐藏页面info.php和传参页面&#xff0c;泄露网站绝对路径并且存在SQL注入点 &#xff08;2&#xff09;已知网站绝对路径&#xff0c;存在SQL注入点&#xff0c;尝试OS-shell写入 &#xff08;3&#xff09;OS-shell写入后…

打造重量级团队:跨越壁垒,引领主数据事业的新篇章

在当下企业竞争激烈、环境复杂多变的背景下&#xff0c;拥有一支高效的团队显得尤为重要。在众多类型的团队中&#xff0c;重量级团队以其跨职能、高协同、强执行力的特点&#xff0c;成为推动企业发展的重要力量。本文将结合我所在公司成立的重量级虚拟组织&#xff0c;探讨如…

【深度学习】GPT1,提高语言理解的生成预训练方法

论文&#xff1a; https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf 文章目录 提高语言理解的生成预训练方法摘要引言相关工作自然语言处理的半监督学习无监督预训练辅助训练目标 框架无监督预训练有…

如何使用alias永久别名(linux篇)

一、alias的使用 alias主要作用是起一个别名的用处 它又分两种形式&#xff1a; ① 临时别名 ② 永久别名 1.第一种&#xff08;临时别名&#xff09;&#xff1a; C:\Users\62452>ssh root192.168.0.102 root192.168.0.102s password: Last login: Sat Jun 15 16:30:12 20…

【MATLAB源码-第229期】基于matlab的有源功率因数校正仿真,采用PI调节改善功率因数;改善后达到99%.

操作环境&#xff1a; MATLAB 2022a 1、算法描述 一、整体结构概述 有源功率因数校正&#xff08;APFC&#xff09;是一种用于提高电力系统功率因数的技术&#xff0c;通过控制电流的波形&#xff0c;使其与电压的波形保持一致&#xff0c;从而减少无功功率的产生&#xff…

天津媒体邀约,及媒体名单?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 天津作为中国北方的重要城市&#xff0c;拥有丰富的媒体资…

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导您使用Spring Annotator实现Spring控制器&#xff0c;标准Java类被添加到搭建项目中&#xff0c;Spring Annotator Spring启用Java类。 虽然本教程的重点是Spring控制器&#xff0c;但是Spring Annotator也可以用于Spring服务、组件和存储库。在本教程中&#xff…

2. zabbix-agent获取监控数据的三种方式

zabbix-agent获取监控数据的三种方式 一、监控其他主机1、在被监控机安装部署zabbix-agent2、在web界面添加监控主机3、系统级别的监控数据参考 二、zabbix-agent监控的三种方式1、利用自带key监控数据1.1 示例1: 监控node01网卡的流入流量1.2 常用的key 2、自定义key的监控2.1…

二分练习题(C. Earning on Bets)

二分练习题&#xff08;C. Earning on Bets&#xff09; 原题链接&#xff1a;点击此处 Earning on Bets 题面翻译 有人提议让您玩一个游戏。在这个游戏中&#xff0c;有 n n n 种可能的结果&#xff0c;对于每一种结果&#xff0c;您都必须下注一定整数的硬币。如果 i …

机器学习第四十四周周报 SAMformer

文章目录 week44 SAMformer摘要Abstract1. 题目2. Abstract3. 网络架构3.1 问题提出3.2 微型示例3.3 SAMformer 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论6.代码复现小结参考文献 week44 SAMformer 摘要 本周阅读了题为SAMformer: Unlocking the Potential…

智源联合多所高校推出首个多任务长视频评测基准MLVU

当前&#xff0c;研究社区亟需全面可靠的长视频理解评估基准&#xff0c;以解决现有视频理解评测基准在视频长度不足、类型和任务单一等方面的局限性。因此&#xff0c;智源联合北邮、北大和浙大等多所高校提出首个多任务长视频理解评测基准MLVU&#xff08;A Comprehensive Be…

【Redis实战专题】「技术提升系列」夯实基础分析探究List列表的点点滴滴

夯实基础分析探究List列表的点点滴滴 List列表介绍队列和堆栈场景常用操作指令llen获取链表的长度llen指令的案例介绍添加购物车信息获取用户数购物车数量 lindex获取指定位置的元素lindex指令的案例介绍获取第三个位置的购物车数据 lrange获取链表子元素列表下标的选择lrange指…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5G基站光纤连接问题(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

(项目实战)业务场景中学透RocketMQ5.0-事务消息在预付卡系统中的应用

1 什么是事务消息 RocketMQ中事务消息主要是解决分布式场景下各业务系统事务一致性问题&#xff0c;常见的分布式事务解决方案有传统XA事务方案、TCC、本地消息表、MQ事务等。今天我们基于RocketMQ事务消息解决预付卡系统资金账户子系统和会员积分子系统、短信子系统分布式事务…

光伏、储能一体化监控及运维解决方案

前言&#xff1a;今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂…

想要成为程序员,首先你需要掌握这这三种编程语言!

作为程序员&#xff0c;掌握多种编程语言是非常有价值的&#xff0c;因为不同的编程语言有不同的优势和适用场景。然而&#xff0c;要指定“必须掌握”的三种编程语言是相当主观的&#xff0c;因为这取决于个人的职业目标、所在行业的需求以及技术趋势。不过&#xff0c;以下三…

【深海王国】小学生都能做的APP?AppInventor、BLE蓝牙、Arduino联合开发你的第一个手机远程控制程序(7)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督依旧为大家带来小学生都能学会的APP制作教程&#xff0c;帮你一周内快速开发一款可以和单片机无线通讯的手机蓝牙APP&#xff0c;let’s go&#xff01; &a…

AI落地不容乐观-从神话到现实

开篇 在这儿我不是给大家泼冷水&#xff0c;而是我们一起来看一下从2022年11月左右GPT3.0掀起了一股“AI狂潮”后到现在&#xff0c;AI在商用、工业、军用下到底有没有得到了大规模应用呢&#xff1f; 这个答案每一个参与者其实心里有数那就是&#xff1a;没有。 但是呢它的…

OrangePi连接Wi-Fi步骤

下面介绍的是用终端命令行的方式配置WIFI&#xff1a; 首先输入以下命令用于扫描并查看周围的WiFi热点。也可以直接连接。 nmcli dev wifi之后会在终端打出周围所有可以连接的WiFi&#xff0c;按方向键上下可以查看显示更多&#xff0c;按q键退出。 然后同样使用nmcli命令连接…