【C++STL基础入门】string类的基础使用

news2024/12/27 12:28:14

文章目录

  • 前言
  • 一、STL使用概述
  • 二、string类概述
    • 1.string类的构造函数
      • string输出
      • 示例代码
    • 2.string类属性
      • 属性是什么
      • 属性API
      • 示例代码
    • 3.输出
      • 输出全部
      • 输出单个字符
  • 总结


前言

本系列文章使用VS2022,C++20版本

STL(Standard Template Library)是C++的一个强大工具集,其中的string类是STL中一个常用的容器。本文将介绍string类的基本使用方法。
在这里插入图片描述


一、STL使用概述

在STL中,我们的每一个容器/string字符串等都是使用面向对象技术来实现的,我们只需要调用里面的函数即可完成任务。在使用过程中,我们需要using namespace std;这个才可以使用,然后添加对应的头文件。
比如像下面这个:

#include <string>
using namespace std;

如果你不想加下面这个,你可以这样写:

#include <string>

std::XXXXXX

XXXXX代表我们的类名,需要在前面加上std::

二、string类概述

tring类是STL中用于处理字符串的容器,提供了许多对字符串进行操作的方法,例如插入、删除、查找、替换等。它的特点在于可以动态地调整字符串的长度,而且内部实现了在内存中存储字符串的机制,屏蔽了底层细节。

1.string类的构造函数

  1. 无参构造string()
  2. string( size_type length, char ch );指定长度ch构造
  3. string( const char *str );字符串初始化构造
  4. string( const char *str, size_type length );str前几个进行构造
  5. string( string &str, size_type index, size_type length );str中间几个构造
  6. string(const string& str);拷贝构造

string输出

1.直接使用<<输出string就行了
2.使用c_str()函数返回const char *再输出

示例代码

#include <iostream>
#include <string>

int main() {
  // 1. 无参构造string()
  std::string str1;
  std::cout << "str1: " << str1 << std::endl;

  // 2. string(size_type length, char ch);指定长度ch构造
  std::string str2(5, 'A');
  std::cout << "str2: " << str2 << std::endl;

  // 3. string(const char *str);字符串初始化构造
  const char* cstr = "Hello, STL!";
  std::string str3(cstr);
  std::cout << "str3: " << str3 << std::endl;

  // 4. string(const char *str, size_type length);str前几个进行构造
  std::string str4(cstr, 5);
  std::cout << "str4: " << str4 << std::endl;

  // 5. string(string &str, size_type index, size_type length);str中间几个构造
  std::string str5(str3, 7, 3);
  std::cout << "str5: " << str5 << std::endl;

  // 6. string(const string& str);拷贝构造
  std::string str6(str3);
  std::cout << "str6: " << str6 << std::endl;

  return 0;
}

输出结果:
str1:
str2: AAAAA
str3: Hello, STL!
str4: Hello
str5: STL
str6: Hello, STL!
在这里插入图片描述

2.string类属性

属性是什么

当我们谈论字符串时,可以将其视为一个字符序列。string类是C++中提供的用于操作字符串的类。它具有许多属性(也称为成员变量或数据成员),这些属性可以让我们更轻松地操作和管理字符串数据。

属性API

  1. capacity();函数返回一个整数,表示为字符串分配的内存空间的大小,即字符串对象的容量。它指的是当前字符串对象可以容纳的字符数的上限。通常情况下,容量大于或等于字符串的长度。该函数没有参数。
  2. reserve();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
  3. length();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
  4. size()函数返回一个整数,表示字符串的长度,即字符串中包含的字符的数量。与之类似的,length()函数也返回字符串的长度。这两个函数是等价的,可以根据个人的偏好来选择使用。
  5. resize():重新设置字符个数
  6. max_size()表示字符串对象可以达到的最大长度。这个值是由编译器和系统环境决定的。

示例代码

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // capacity()
    std::cout << "Capacity: " << str.capacity() << std::endl;

    // reserve()
    str.reserve(20);
    std::cout << "Capacity after reserve: " << str.capacity() << std::endl;

    // length() or size()
    std::cout << "Length: " << str.length() << std::endl;
    std::cout << "Size: " << str.size() << std::endl;

    // resize()
    str.resize(8);
    std::cout << "After resize: " << str << std::endl;

    return 0;
}

输出:

在这里插入图片描述

Capacity: 11
Capacity after reserve: 30
Length: 11
Size: 11
After resize: Hello Wo

3.输出

输出全部

1、使用<<运算符输出
2、使用函数c_str()返回const char *,然后打印

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";

    // 使用 << 运算符输出
    std::cout << "Output using << operator: " << str << std::endl;

    // 使用 c_str() 函数返回 const char *
    const char* cstr = str.c_str();
    std::cout << "Output using c_str() function: " << cstr << std::endl;

    return 0;
}

输出结果:

Output using << operator: Hello, World!
Output using c_str() function: Hello, World!

输出单个字符

1、使用at(index)函数指定返回的字符,越界throw(out_of_range)
2、使用下标运算符[index]指定字符

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // 使用 at(index) 函数
    try {
        char ch = str.at(4);  // 获取索引为4的字符
        std::cout << "Character at index 4: " << ch << std::endl;

        // 越界访问
        char outOfRangeChar = str.at(20);  // 索引超出字符串长度,会抛出 std::out_of_range 异常
        std::cout << "Character at index 20: " << outOfRangeChar << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    // 使用下标运算符 [index]
    char ch = str[2];  // 获取索引为2的字符
    std::cout << "Character at index 2: " << ch << std::endl;

    return 0;
}

输出结果:

Character at index 4: o
Exception: basic_string::at: __n (which is 20) >= this->size() (which is 11)
Character at index 2: l

总结

STL中的string类是一个强大且常用的容器,它提供了丰富的操作方法用于处理字符串。通过采用面向对象的方式实现,STL封装了底层的实现细节,提供了高效和便利的字符串操作接口。面向对象实现的好处包括封装性、可复用性和继承多态等,使得string类在实际应用中更加灵活和扩展性强。掌握STL的string类基础是C++开发的重要一步,通过深入理解其使用方法和面向对象的实现方式,可以更加高效地处理和操作字符串。

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

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

相关文章

linux平台实现虚拟磁盘驱动(通用的块设备驱动和基于SCSI的磁盘驱动)

by fanxiushu 2023-08-16 转载或引用请桌面原始作者。 实现linux平台的虚拟磁盘驱动&#xff0c;是为了要实现在linux远程无盘启动的。 linux平台下的无盘启动&#xff0c;现成的办法有许多&#xff0c;比如iSCSI&#xff0c;NFS&#xff0c;NBD等都可以&#xff0c; 不过我都没…

JVM中释放内存的三种方法

判断是否需要垃圾回收可以采用分析。 1标记--清除算法 分为两个阶段&#xff0c;标记和清除&#xff0c;先利用可达性分型标记还存活的对象&#xff0c;之后将没有被标记的对象删除&#xff0c;这样容易生成空间碎片&#xff0c;而且效率不稳定 标记阶段&#xff1a; 标记阶段…

C#和Java的大端位和小端位的问题

C#代码里就是小端序,Java代码里就是大端序&#xff0c; 大端位:big endian,是指数据的高字节保存在内存的低地址中&#xff0c;而数据的低字节保存在内存的高地址中&#xff0c;也叫高尾端 小端位:little endian,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存…

vue : 无法加载文件 F:\nodejs\vue.ps1,因为在此系统上禁止运行脚本。

报错信息如下 在使用Windows PowerShell输入指令查看版本时或者用脚手架创建vue项目时都有可能报错&#xff0c;报错信息如下&#xff1a;vue : 无法加载文件 F:\nodejs\vue.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方案&#xff1a; 原因&#xff1a;因为Windows Po…

问道管理:金叉死叉十句口诀?

随着越来越多人参加股票买卖&#xff0c;关于股票商场的了解也变得越来越重要。其中一项重要的概念就是金叉死叉&#xff0c;这是一种均线穿插的现象&#xff0c;而均线穿插是技能剖析的重点之一。在本文中&#xff0c;咱们将会从多个角度剖析金叉死叉&#xff0c;并给出十句口…

Qt应用开发(基础篇)——MDI窗口 QMdiArea QMdiSubWindow

一、前言 QMdiArea类继承于QAbstractScrollArea&#xff0c;QAbstractScrollArea继承于QFrame&#xff0c;是Qt用来显示MDI窗口的部件。 滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 框架类 QFramehttps://blog.csdn.net/u01…

sqlite3用法

完成数据库的插入。 程序如下&#xff1a; 运行结果如下&#xff1a;

Python学习笔记_基础篇(十)_socket编程

本章内容 1、socket 2、IO多路复用 3、socketserver Socket socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&#xff0c;对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现&#xff0c;socket即是一种特殊的文件&…

返回数组中最大(最小)值的位置(索引值),查找范围可以是所有元素,或者指定行列numpy.argmax()numpy.argmin()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回数组中最大(最小)值的位置(索引值)&#xff0c; 查找范围可以是所有元素&#xff0c;或者指定行列 numpy.argmax() numpy.argmin() [太阳]选择题 关于以下代码说法错误的一项是? import…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——模态——-句式转换——逻辑转换

第一节 模态命题-句式转换-逻辑转换 题-模态命题-句式转换-逻辑转换&#xff1a;①不一定不可能&#xff1b;②不一定可能不未必。 1.唐代韩愈在《师说》中指出&#xff1a;“孔子曰&#xff1a;三人行&#xff0c;则必有我师。是故弟子不必不如师&#xff0c;师不必贤于弟子…

Java 反射出现的背景和简单概述

反射出现的背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致。 编译时类型是指在编译时期确定的对象类型&#xff0c;它是根据声明时所使用的类型来确定的。编译时类型是在编…

Error = [Microsoft][SQL Server Native Client 10.0]无法打开 BCP 主数据文件(已解决)

需求&#xff1a;分页方式查出表中数据存入excel中&#xff0c;并给excel标记不同的编号 前提&#xff1a; #all_4表中数据已准备好 版本&#xff1a; sql server 2008 declare n int set n 1 while n 100 begin print n:print nEXEC master.dbo.sp_configure show adva…

C#实现图像选择验证码

开发环境&#xff1a;C#&#xff0c;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core 前几年使用12306购买火车票时使用过这种验证码&#xff0c;根据文字描述选择对应的图片&#xff0c;文字是随机的&#xff0c;图片也是随机的。 1、建立一个验证码控制器 新建两个…

2023年国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

保姆级别讲解Python数据处理,你绝对能会

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 1. 文件读取 2. 数据处理 3. 处理结果输出 总的来说 为了咱们让程序跑起来&#xff0c;我们需…

如何使用CSS实现一个瀑布流布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现瀑布流布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…

前端笔记2023

border-radius: 数值px;圆角 flex布局 小程序中 display:flex; //flex布局 flex-direction:row/column; //规定主轴的方向&#xff1a;row/column justify-content:space-around; //元素在主轴方向的排列方式&#xff1a;flex-start/flex-end/space-around/space-betwee…

【动画】p61Mixamo自动绑定骨骼

Mixamo自动绑定骨骼 Mixamo Mixamo 虚幻商城搜索Mixamo Animation Retargeting 有两个版本4.14-4.27和5.0-5.2 优化&#xff1a; 程序方面优化 素材方面优化 光照方面优化 模型面数优化 材质方面优化 先获得一个模型 打开mixamo网站 导入模型 自动进入自动绑骨界面&#xf…

工厂方法模式【Factory Method Pattern】

前言 1.工厂模式概念 实例化对象&#xff0c;用工厂方法代替new操作(重点) 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展 2.什么情况下适合工厂模式 有一组类似的对象需要创建 在编码时不能预见需要创建哪种类的实例 系统需要考虑扩展性&#xff…

前端(十二)——深入理解和使用 async和await

&#x1f61b;博主&#xff1a;小猫娃来啦 &#x1f61b;文章核心&#xff1a;深入理解和使用 async和await 在 JS中&#xff0c;异步操作是无法避免的&#xff0c;而处理异步操作最常用的方法是使用回调函数或者 Promise。然而&#xff0c;自 ES2017 引入了 async/await 之后…