【C++篇】字符串:标准库string类

友情链接:C/C++系列系统学习目录

知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误,同时方便本人的基础复习,也希望能帮助到大家
 
最好的好人,都是犯过错误的过来人;一个人往往因为有一点小小的缺点,将来会变得更好。如有错漏之处,敬请指正,有更好的方法,也希望不吝提出。最好的生活方式就是和努力的大家,一起奔跑在路上


文章目录

    • ⛳(二)C++字符串:标准库string类
      • 🎈1.基本用法
        • (1)string变量的定义、初始化
        • (2)string变量的输入、输出
        • (3)string对象上的操作
      • 🎈2.string类对象与字符数组的区别


⛳(二)C++字符串:标准库string类

C++处理字符串的方式有两种,一种就是在C中讲的采用字符数组的方式,还有一种基于string类库的方法

🎈1.基本用法

C++可以使用string类型的变量(使用C++的话说是对象)而不是字符数组来存储字符串,首先必须包含头文件string,同时string类位于名称空间std中:

#include <iostream>   
#include <string>

using namespace std;

int main()                                   
{                                           
    string a;
    return 0;
}
  • string类定义隐藏了字符串的数组性质,能够像处理普通变量那样处理字符串
  • 可以使用C风格字符串来初始化string对象。
  • 可以使用 cin来将键盘输入存储到string对象中。
  • 可以使用cout来显示 string对象。
  • 可以使用数组表示法来访问存储在 string 对象中的字符。

(1)string变量的定义、初始化

string girlFriend1;   //定义了一个字符串变量,此时,该字符串是空字符串
girlFriend1 = "王菲"; //把字符串常量"王菲"拷贝到 girlFriend
cout << "girlFriend1 = " << girlFriend1 << endl;

string girlFriend2;
girlFriend2 = girlFriend1; //把字符串变量 girlFriend1 的值拷贝到 girlFriend2
cout << "girlFriend2 = " << girlFriend2 << endl
    
//定义 girlFriend3 的同时,使用字符串常量"周迅"来初始化
string girlFriend3("周迅");
cout << "girlFriend3 = " << girlFriend3 << end
    
//定义 girlFriend4 的同时,使用字符串变量来初始化
string girlFriend4(girlFriend3);
cout << "girlFriend4 = " << girlFriend4 << endl;

//第一个参数表示字符个数
string girlFriend5(10, 'A');
cout << "girlFriend5 = " << girlFriend5 << endl;

(2)string变量的输入、输出

//基本输入输出
string job;
cout << "你是做什么工作的?" << endl;
cin >> job;
cout << "做" << job << ",收入一定不错吧?" << endl;

//自动跳过空白字符
string university; //大学
string profession; //专业
cout << "你是哪个学习毕业的?学什么专业? ";
// 输入: 清华 考古 hello
// 自动跳过空白字符
cin >> university >> profession;
cout << university << "的" << profession << "
    
    
//连续输入多个字符串,个数不确定
string food; 
int i = 0;
cout << "你喜欢什么美食? ";
while (cin >> food) { //当用户输入 Ctrl + z 并回车 cin >> food 返回 0, 0 就是假
    i = i + 1;
    cout << "你喜欢的第" << i << "美食是:" << food << endl ;
    cout << "你还喜欢吃什么美食? ";
}

(3)string对象上的操作

在这里插入图片描述

字符串合并:

string类简化了字符串合并操作。可以使用运算符+将两个string对象合并起来,还可以使用运算+=将字符串附加到string对象的末尾。

string str3 ;
str3 = strl +str2;   //assign str3 the joinedstrings
str += str2 ;        //add str2 to the end of str1

字符串复制:

同样可以使用函数strcpy()将字符串复制到字符数组中,使用函数 strcat() 将字符串附加到字符数组末尾:

strcpy(charr1,charr2);   //copy charr2 to charr1
strcat(charr1,charr2);  //append contents of charr2 tO char1

strlen()和size()的区别:

  • 函数strlen( )是一个常规函数,它接受一个C风格字符串作为参数,并返回该字符串包含的字符数(注意不包括最后的空字符)。
  • size()是string类的一个方法,功能基本上与strlen( )相同,也不包括最后的空字符

🎈2.string类对象与字符数组的区别

  • string类对象和字符数组之间的主要区别是,可以将string 对象声明为简单变量,而不是数组
  • 类设计让程序能够自动处理string的大小。例如 strI 的声明创建一个长度为0的sting对象;但程序将输入读取到str中时,将自动调整str1的长度。这使得与使用数组相比,使用string对象更方便,也更安全。
  • 从理论上说,可以将 char 数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体。
  • 不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象

原始字符串:

在原始字符串中,字符表示的就是自己,例如,序列\n不表示换行符,而表示两个常规字符—斜杠和n,用前缀R来标识原始字符串:

cout << R"(Jimn "King" Tutt uses " \n" instead of endl.) " << '\n ';

输入原始字符串时,按回车键不仅会移到下一行,还将在原始字符串中添加回车字符。


行文至此,落笔为终。文末搁笔,思绪驳杂。只道谢不道别。早晚复相逢,且祝诸君平安喜乐,万事顺意。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试篇:Java基础

目录 一、HashMap 的底层结构和原理 1、JDK7 2、JDK8 3、扩容问题 二、讲一下你对动态代理的理解 1、JDK动态代理 2、CGLIB动态代理 三、Java 集合体系的划分、List、Set、Map 的区别 四、ArrayList 和 LinkedList 的区别 1、数据结构实现&#xff1a; 2、随机访问&a…

Python-Selenium-定位详解

目录 前言&#xff1a; 一、id定位 二、name定位 三、class_name定位 四、xpath定位 五、css_selector定位 六、tag_name定位 七、link_text 定位 八、Xpath&Css定位方法速查表 九、By定位 十、elements复数定位 十一、JS的定位 前言&#xff1a; Python是一种…

pikachu靶场-PHP反序列化

在理解这个漏洞前,你需要先搞清楚php中serialize()&#xff0c;unserialize()这两个函数。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{public $test"pikachu";}$snew S(); //创建一个对象serialize($s); //…

eclipse中创建一个maven父工程和几个模块(子工程)

示例&#xff1a;创建一个父工程和几个模块&#xff08;子工程&#xff09; 1&#xff09;、先创建一个父工程 注意&#xff1a;下面的Packaging选择pom&#xff1a; 点击Finish&#xff0c;父工程就创建好了&#xff1a; 2&#xff09;、再创建模块&#xff08;module&am…

RuntimeError: launcher ‘pdsh‘ not installed解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

麒麟系统在线安装docker(x86/arm)

文章目录 一、查看系统版本&#xff0c;确认版本二、查看系统架构三、下载安装docker-ceX86架构安装aarch64架构 一、查看系统版本&#xff0c;确认版本 [rootlocalhost ~]# cat /etc/kylin-release Kylin Linux Advanced Server release V10 (Sword)二、查看系统架构 [root…

基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)

前言&#xff1a;本文为手把手教学飞控核心知识点之一的姿态解算——MPU6050 姿态解算&#xff08;飞控专栏第2篇&#xff09;。项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算&#xff08;四元数方法&#xff09;&#xff0c;搭配设计的卡尔曼滤波器与一阶低通滤波器…

软件设计模式之原型模式

一.定义 原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式。正是由于简单&#xff0c;使用的场景才非常地多&#xff0c;其定义如下: Specify the kinds of objects to create using a prototypical instance, and create new objects by copyingthis protot…

第七章 测试

文章目录 第七章 测试7.1 编码7.1.1 选择程序设计语言1. 计算机程序设计语言基本上可以分为汇编语言和高级语言2. 从应用特点看&#xff0c;高级语言可分为基础语言、结构化语言、专用语言 7.1.2 编码风格 7.2 软件测试基础7.2.1 软件测试的目标7.2.2 软件测试准则7.2.3 测试方…

边缘智能:边缘计算驱动实时深度学习

边缘智能 作为人工智能领域的当红炸子鸡&#xff0c;深度学习技术近年来得到了学术界与产业界的大力追捧。目前&#xff0c;深度学习技术已在计算机视觉、自然语言处理以及语音识别等领域大放异彩&#xff0c;相关产品正如雨后春笋般涌现。由于深度学习模型需要进行大量的计算…

Delta 一个新的 git diff 对比显示工具

目录 介绍git diff 介绍delta介绍 一、安装1.下载 Git2.下载 delta3.解压4.修改配置文件5. 修改主题6.其他配置和说明 二、对比命令1.在项目中 git diff 常用命令2.对比电脑上两个文件3.对比电脑上的两个文件夹 三、在Git 命令行中使用效果四、在idea 的Terminal命令行中使用效…

linux 内核版本和发行版本

当要明确自己的Linux系统的版本号时&#xff0c;大多数情况是用命令确定Linux内核版本的。不过这个还是要与CentOS的版本号&#xff08;就是你使用的Linux系统的发行版本&#xff09;区分开来&#xff0c;这两个不是一个东西。 一、发行版本号 比如当时安装CentOS时&#x…

MySQL是什么,如何整合SpringBoot,以及使用优势

目录 一、MySQL是什么 二、如何整合SpringBoot 三、MySQL使用优势 一、MySQL是什么 MySQL是一种开源的关系型数据库管理系统&#xff0c;采用客户机/服务器模式实现数据存储和管理。其最初由瑞典的MySQL AB公司开发&#xff0c;后来被Sun Microsystems收购&#xff0c;最终…

【Python 随练】寻找完数

题目&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如 61&#xff0b;2&#xff0b;3.编程找出 1000 以内的所有完数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;如何找出 1000 以内的所有…

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion(保姆级教程)

AI绘画基于 Kaggle 10 分钟搭建 Stable Diffusion&#xff08;保姆级教程&#xff09; 一、引言二、安装教程1. 注册 Kaggle2. Edit My Copy3. 进行手机号的验证4. 打开 “internet off” 开关&#xff0c;并选择显卡5. 开启 session&#xff0c;运行脚本 三、主界面介绍四、注…

Windows提示“找不到rgss202j.dll”怎么办?

Rgss202j.dll文件是Windows操作系统最重要的系统文件之一&#xff0c;它包含了一组程序和驱动函数。如果此文件丢失或损坏&#xff0c;驱动程序将无法正常工作&#xff0c;并且相应的应用程序也将无法正常启动且运行。通常情况下&#xff0c;造成Rgss202j.dll文件无法找到的原因…

计算机的工作过程和主要性能指标

一、计算机的工作过程 为使计算机按预定要求工作&#xff0c;首先要编制程序。 程序是一个特定的指令序列&#xff0c;它告诉计算机要做哪些事&#xff0c;按什么步骤去做。 指令是一组二进制信息的代码&#xff0c;用来表示计算机所能完成的基本操作。 编制好的程序放在主存中…

redis 的基本介绍以及 五种 数据类型

一、redis是什么&#xff1f; 一句话&#xff1a;redis 是一个开源的、使用C语言编写的、支持网络交互&#xff0c;基于内存也可持久化的 key-value &#xff08;非关系型&#xff09;数据库 redis作者博客&#xff0c;有兴趣的小伙伴可以去逛一逛&#xff1a;http://github.…

Android 9 蓝牙协议初始化

先讲一下Application类的使用 要使用自定义的Application&#xff0c;首先就是要自己新建一个Application的子类&#xff0c;然后把它的名字写在manifest文件里面的application标签里的android:name属性就行&#xff0c;如我的Application子类名字是BaseApplication&#xff0c…

Selenium 环境配置

如果你做过 Web 测试的工作&#xff0c;那么你应该明白 Web 测试中最重要的一部分工作就是自动化测试。自动化测试&#xff0c;顾名思义就是让浏览器自动运行&#xff0c;而无需手动操作。这和我们爬虫工作原理有些相似&#xff0c;我们爬虫也需要让浏览器运行网址来获取我们需…