C++STL中的string容器

string**容器基本概念

C 风格字符串 ( 以空字符结尾的字符数组 ) 太过复杂难于掌握,不适合大程序的开发, 所以 C++ 标准库定义了一种 string 类,定义在头文件。
String 和 c 风格字符串对比:
u Char*是一个指针,
String 是一个类 string 封装了 char ,管理这个字符串,是一个 char 型的容器。
u String 封装了很多实用的成员方法
查找 find,拷贝 copy ,删除 delete 替换 replace ,插入 insert
u 不用考虑内存释放和越界
string 管理 char* 所分配的内存。每一次 string 的复制,取值都由 string 类负责维护,不用担心复制越界和取值越界等。

string 构造函数

string();//创建一个空的字符串 例如 : string str;
string(const string& str);//使用一个 string 对象初始化另一个 string 对象
string(const char* s);//使用字符串 s 初始化
string(int n, char c);//使用 n 个字符 c 初始化

string 基本赋值操作

string& operator =( const char * s); //char* 类型字符串 赋值给当前的字符串
string& operator =( const string &s); // 把字符串 s 赋给当前的字符串
string& operator =( char c); // 字符赋值给当前的字符串
string& assign( const char *s); // 把字符串 s 赋给当前的字符串
string& assign( const char *s, int n); // 把字符串 s 的前 n 个字符赋给当前的字 符串
string& assign( const string &s); // 把字符串 s 赋给当前字符串
string& assign( int n, char c); // n 个字符 c 赋给当前字符串
string& assign( const string &s, int start, int n); // s start 开始 n 字符赋值给字符串

string 存取字符操作

char & operator []( int n); // 通过 [] 方式取字符
char & at( int n); // 通过 at 方法获取字符

string 拼接操作

string& operator +=( const string& str); // 重载 += 操作符
string& operator +=( const char * str); // 重载 += 操作符
string& operator +=( const char c); // 重载 += 操作符
string& append( const char *s); // 把字符串 s 连接到当前字符串结尾
string& append( const char *s, int n); // 把字符串 s 的前 n 个字符连接到当前字 符串结尾
string& append( const string &s); // operator+=()
string& append( const string &s, int pos, int n); // 把字符串 s 中从 pos 开始 n 个字符连接到当前字符串结尾
string& append( int n, char c); // 在当前字符串结尾添加 n 个字符 c string 查找和替换
int find( const string& str, int pos = 0 ) const ; // 查找 str 第一次出现位置 , pos 开始查找
int find( const char * s, int pos = 0 ) const ; // 查找 s 第一次出现位置 , po s 开始查找
int find( const char * s, int pos, int n) const ; // pos 位置查找 s 的前 n 个字符第一次位置
int find( const char c, int pos = 0 ) const ; // 查找字符 c 第一次出现位置
int rfind( const string& str, int pos = npos) const ; // 查找 str 最后一次位 , pos 开始查找
int rfind( const char * s, int pos = npos) const ; // 查找 s 最后一次出现位置 , pos 开始查找
int rfind( const char * s, int pos, int n) const ; // pos 查找 s 的前 n 个字符 最后一次位置
int rfind( const char c, int pos = 0 ) const ; // 查找字符 c 最后一次出现位置
string& replace( int pos, int n, const string& str); // 替换从 pos 开始 n 字符为字符串 str
string& replace( int pos, int n, const char * s); // 替换从 pos 开始的 n 个字 符为字符串 s

string 比较操作

/*
compare 函数在 > 时返回 1 < 时返回 -1 == 时返回 0
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的 A 比小写的 a 小。
*/
int compare( const string &s) const ; // 与字符串 s 比较
int compare( const char *s) const ; // 与字符串 s 比较 string 子串
string substr( int pos = 0 , int n = npos) const ; // 返回由 pos 开始的 n 个字符 组成的字符串

string 插入和删除操作

string& insert( int pos, const char * s); // 插入字符串
string& insert( int pos, const string& str); // 插入字符串
string& insert( int pos, int n, char c); // 在指定位置插入 n 个字符 c
string& erase( int pos, int n = npos); // 删除从 Pos 开始的 n 个字符

string 和 c-style 字符串转换

//string 转 char*
string str = "itcast" ;
const char * cstr = str.c_str();
//char* 转 string
char * s = "itcast" ;
string str(s);
在 c++ 中存在一个从 const char string 的隐式类型转换,却不存在从一个 string 对象到 Cstring 的自动类型转换。对于 string 类型的字符串,可以通过 cstr() 函数 返回 string 对象对应的 C_string. 通常,程序员在整个程序中应坚持使用 string 类对象,直到必须将内容转化为 char 时才将其转换为 C_string.
提示 :
为了修改 string 字符串的内容,下标操作符 [] 和 at 都会返回字符的引用。但当字 符串的内存被重新分配之后,可能发生错误.
string s = "abcdefg" ;
char & a = s[ 2 ];
char & b = s[ 3 ];
a = '1' ;
b = '2' ;
cout << s << endl;
cout << ( int *)s.c_str() << endl;
s = "pppppppppppppppppppppppp" ;
//a = '1';
//b = '2';
cout << s << endl;
cout << ( int *)s.c_str() << endl;

相关推荐
m_Molly7 分钟前
vs2022配置opencv==4.9.0(C++)
c++·opencv
yanyanwenmeng13 分钟前
matlab基础
开发语言·算法·matlab
charon877824 分钟前
Unreal Engine 5 C++: 编辑器工具编写入门(中文解释)
c++·ue5·编辑器·游戏引擎·虚幻
Ddddddd_15827 分钟前
C++ | Leetcode C++题解之第421题数组中两个数的最大异或值
c++·leetcode·题解
末央&30 分钟前
【C++】内存管理
java·开发语言·c++
不是仙人的闲人33 分钟前
Qt日志输出及QsLog日志库
开发语言·数据库·qt
八了个戒39 分钟前
【TypeScript入坑】TypeScript 的复杂类型「Interface 接口、class类、Enum枚举、Generics泛型、类型断言」
开发语言·前端·javascript·面试·typescript
梦想科研社1 小时前
【无人机设计与控制】四旋翼无人机轨迹跟踪及避障Matlab代码
开发语言·matlab·无人机
Yan-英杰1 小时前
Encountered error while trying to install package.> lxml
开发语言·python·pandas·pip·issue
卡卡_R-Python1 小时前
海洋气象编程工具-Python
开发语言·python