当前位置: 首页 > web >正文

【C++】string 的特性和使用

Ciallo~ (∠・ω< )⌒★

string(1)

  • 1. 构造函数
    • 1.1 string();
    • 1.2 string(const char* s);
    • 1.3 string(const string& str);
    • 1.4 string(size_t n, char c);
    • 1.5 string(const string& str, size_t pos, size_t len = npos);
    • 1.6 string(const char* s, size_t n);
  • 2. 析构函数
  • 3. 赋值运算符重载
  • 4. 字符串的遍历
    • 4.1 下标+[]
    • 4.2 迭代器
    • 4.3 范围for
  • 5. string类对象的容量操作
  • 6. string类对象的修改操作
  • 7. string类非成员函数

1. 构造函数

string类有如下图的构造函数:
在这里插入图片描述
其中比较重要的是1,2,4,6。

1.1 string();

无参的构造函数,定义了一个空字符串

string str1;

1.2 string(const char* s);

用常量串初始化

string str1("hello world!");
string str2 = "hello world!";

这两种初始化方式的意义是不一样的,str1是直接构造,str2是隐式类型转换

1.3 string(const string& str);

这是string类的拷贝构造函数

string str1("hello world!");
string str2(str1);

1.4 string(size_t n, char c);

用n个字符c初始化

string str(10, '*'); //用10个*初始化str

1.5 string(const string& str, size_t pos, size_t len = npos);

字符串的截取,其中str是源字符串,pos是开始截取的位置,len是截取的长度

string str1 = "hello world";
string str2(str1, 2, 6);

输出结果是:llo wo

1.6 string(const char* s, size_t n);

拷贝一个字符数组s的前n个元素

2. 析构函数

~string(),是string类已经写好的,而且在程序结束时会自动调用,没啥好说的。

3. 赋值运算符重载

在这里插入图片描述

str1 = "Test string: ";   // c-string
str2 = 'x';               // single character
str3 = str1 + str2;       // string

4. 字符串的遍历

4.1 下标+[]

string str("hello world");
for (int i = 0; i < str.size(); i++)
{cout << str[i] << " ";
}

4.2 迭代器

string str("hello world");
string::iterator it = str.begin();
while (it != str.end())
{cout << *it << " ";++it;
}
cout << endl;

迭代器是通用的遍历容器的方法,用原生指针或用封装原生指针的自定义类实现。

4.3 范围for

auto是C++11引入的关键字,用于自动推导变量类型。编译器根据初始化表达式的类型推断变量的实际类型,简化代码编写并提升可读性。

string str("hello world");
for (auto e : str)
{cout << e << " ";
}

5. string类对象的容量操作

函数名功能
size返回字符串的有效字符长度
length返回字符串的有效字符长度
capacity返回字符串总空间大小
empty判断字符串是否为空,是则返回true,否则返回false
clear清空有效字符
reserve为字符串预留空间
resize将有效字符个数设为n个,多出的空间用指定字符填充

注意当 reserve 的参数大于字符串底层总空间大小时,扩容,小于字符串底层总空间大小时不缩容。
当 resize 的参数大于字符串底层总空间大小时,调用reserve扩容。

6. string类对象的修改操作

函数名功能
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+=在字符串后追加一个字符串
c_str将字符串以字符数组形式返回
find查找一个字符或字符串第一次出现的下标
substr从pos位置开始,向后截取n个字符,然后将其返回

7. string类非成员函数

函数功能
operator+追加字符串
operator<<输出运算符重载
operator>>输入运算符重载
getline获取一行字符串
rational operators字符串的大小比较
http://www.xdnf.cn/news/17541.html

相关文章:

  • Python(13) -- 面向对象
  • 【面试场景题】通过LinkedHashMap来实现LRU与LFU
  • Java+Vue打造的采购招投标一体化管理系统,涵盖招标、投标、开标、评标全流程,功能完备,附完整可二次开发的源码
  • 标准IO实现
  • Effective C++ 条款32:确定你的public继承塑模出 is-a 关系
  • AWT 基本组件深入浅出:Button/Label/TextField/Checkbox/Choice/List 全面实战与性能优化
  • 2025-08-09 李沐深度学习14——经典卷积神经网络 (2)
  • MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)
  • Mysql笔记-系统变量\用户变量管理
  • 【LLM实战|langchain】langchain基础
  • toRef和toRefs
  • 智慧城管复杂人流场景下识别准确率↑32%:陌讯多模态感知引擎实战解析
  • Easysearch 冷热架构实战
  • Linux下管道的实现
  • SpringBoot 集成 MapStruct
  • 《从零实现哈希表:详解设计、冲突解决与优化》
  • [激光原理与应用-197]:光学器件 - 图解双折射晶体的工作原理
  • Aurora接口FPGA设计
  • C# 异步编程(使用异步Lambda表达式)
  • pdf预览Vue-PDF-Embed
  • C++ 类模板
  • Android MVP架构详解:从理论到实践
  • [优选算法专题一双指针——四数之和]
  • 大语言模型概述
  • 【后端】Java Stream API 介绍
  • Java -- 日期类-第一代-第二代-第三代日期
  • Datawhale AI夏令营第三期,多模态RAG方向 Task2
  • QT环境搭建
  • 下肢康复机器人机械结构设计cad【6张】三维图+设计说明说书
  • 【数据结构入门】栈和队列