博客
关于我
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:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>