博客
关于我
c++中string类
阅读量:616 次
发布时间:2019-03-13

本文共 2047 字,大约阅读时间需要 6 分钟。

String类概述

C++中的string类是一个强大的字符串操作容器,基于标准库的basic_string模板类实现。本节将详细介绍string类的特点、常用操作及应用场景。

String类特点

string类提供了丰富的内置操作和功能,与标准容器接口相似,但专注于处理字符串类型数据。它具备以下核心特点:

1. 内置的字符串操作接口,简化了字符串常用操作

2. 支持快速的字符串拼接和修改操作
3. 提供高效的内存管理功能,减少内存碎片问题
4. 可扩展和定制内存分配策略

String类基本构造方法

string类的构造方法庞大但灵活,旨在支持多种字符串创建场景。常见的构造方式包括:

1. 空构造:string() - 创建空字符串

2. 字符串构造 :string(const char* s) - 使用C字符串构造
3. 重复字符构造 :string(size_t n, char c) - 生成由字符c重复n次组成的字符串
4. 拷贝构造 :string(const string& s) - 拷贝另一个string对象的内容

示例代码:int main(){ string s0; // 空字符串 string s1("Hello world!"); // 使用C字符串构造 string s2(s1); // 拷贝构造 // 其他构造方式同理 return 0;}

String类核心操作

容量管理

string类提供了丰富的容量管理功能,主要包括:

1. 内容长度查询:size() && length() - 返回字符串的有效字符长度

2. 空函数:empty() - 判断字符串是否为空
3. 内容清空:clear() - 释放字符串中的内容
4. 预留空间:reserve(size_t n) - 为string预留额外的空间
5. 调整大小:resize(size_t n, char fill = char()) - 根据需求调整字符串大小

示例代码:int main(){ string s1("Hello world!"); // 创建字符串 cout << "s1的原始长度:" << s1.size() << endl; // 输出有效字符个数 cout << "s1的容量(包括成功字符和空白):" << s1.capacity() << endl;

s1.resize(9); // 调整到9个字符cout << "调整后的大小:" << s1.size() << endl;// 启发空字符串的其他操作string s2, s3;s2.reserve(20); // 预留空间s3.resize(20, '*'); // 创建由*填充的长字符串return 0;

}

字符串修改

string类提供了多种修改字符串的方法,包括:

1. 添加字符:push_back(char c) - 在末尾添加一个字符

2. 删除字符:pop_back() - 从末尾删除一个字符
3. 查找字符:find(const char* sub, size_t n = string::npos) - 寻找子字符串位置
4. 替换字符:replace(size_t pos, size_t len, const char* sub) - 替换指定位置的字符

示例代码:int main(){ string s1("Hello world!");

// 添加一个感叹号s1.push_back('!');cout << s1 << endl; // 输出修改后的字符串

<>();

// 删除最后一个字符s1.pop_back();cout << s1 << endl;// 查找子字符串size_t pos = s1.find("lo");if (pos != string::npos){    cout << "找到'lo'的位置:" << pos << endl;}else{    cout << "未找到指定子串" << endl;}return 0;

}

String类常用应用场景

string类在许多开发场景中发挥重要作用,以下是一些典型示例:

字符串转换为整数

示例代码:int StrToInt(string s){ int num = 0; auto it = s.begin(); while (it != s.end()) { num *= 10; num += (*it - '0'); ++it; } return num;}

字符串逆序操作

示例代码:// 字符串逆置string Reverse(string s){ int start = 0, end = s.size() - 1; while (start < end) { swap(s[start], s[end]); ++start; --end; } return s;}

转载地址:http://fmzaz.baihongyu.com/

你可能感兴趣的文章
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>