C++ STL string类
C++ STL string类
String简介
STL 中只有一个字符串类,即 basic_string,实现管理以’\0’结尾的字符数组,字符类型由模板参数决定。
字符类型的性质是由字符特征类(char_traits)定义的:
template <class Ch> struct char_traits { }
string 作为类出现,其集成的操作函数足以完成多数情况下的需要。可以使用 “=” 进行赋值,使用 “==” 进行等值比较,使用 “+” 做串联。
要使用 string 类,必须包含头文件 。在 STL 库中,basic_string 有两个预定义类型:包含 char 的 string 类型和包含 wchar 的 wstring 类型。
typedef basic_string <char> string;
typedef basic_string <wchar> wstring;
String 类成员函数
函数名称 | 功能 |
---|---|
构造函数 | 产生或者复制字符串(PS:复制字符串也会调用) |
析构函数 | 销毁字符串时调用 |
=,assign | 赋值操作 |
swap | 交换字符串 |
+ ,=,append(),push_back() | 添加字符 |
insert() | 插入字符 |
erase() | 删除、擦除字符 |
clear() | 清除整个字符串 |
resize() | 改变字符串长度 |
replace() | 替换方法 |
+ | 字符串追加 |
==,! =,<,<=,>,>=,compare() | 字符串比较操作 |
size(),length() | 返回字符串字符数量 |
empty () | 判断字符串是否为空 |
[],at() | 取出对应index的字符 |
>>,getline() | 从steam流中获取某些值,塞入字符串中 |
<< | 将某些字符串的值输入到steam |
copy() | 拷贝字符串 |
c_str() | 将一个内容以字符串string的形式来返回 |
data() | 将内容以字符数组的形式返回 |
substr() | 求字符串的子串 |
find() | 字符串中查找某个字符 |
begin().end() | 字符串的正向迭代器 |
rbegin(),rend() | 逆向迭代器 |
get_allocator() | 返回配置器(PS:没搞懂) |
string 构造函数和析构函数
string strs //生成空字符串
string s(str) //按照str复制一个s出来
string s(str,strindex) //按照str,从始于strindex开始作为入参得到s
string s(str,strbegin,strlen) //按照str,从strbegin开始,长度为strlen的字符串 为s
string s(cstr) //以c_string类型作为入参为s的初始值
string s(cstr,char_len) //以C_string的前char_len个字符串为字符串s的初始值
string s(num,c) //生成-个num个c的字符串
string s(str,beg,end) //以区间[beg,end]内的字符为字符串s的初始值
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("12345678");
char ch[ ] = "abcdefgh";
string a; //定义一个空字符串
string str_1 (str); //构造函数,全部复制
string str_2 (str, 2, 5); //构造函数,从字符串str的第2个元素开始,复制5个元素,赋值给str_2
string str_3 (ch, 5); //将字符串ch的前5个元素赋值给str_3
string str_4 (5,'X'); //将 5 个 'X' 组成的字符串 "XXXXX" 赋值给 str_4
string str_5 (str.begin(), str.end()); //复制字符串 str 的所有元素,并赋值给 str_5
cout << str << endl;
cout << a << endl ;
cout << str_1 << endl;
cout << str_2 << endl;
cout << str_3 << endl;
cout << str_4 << endl;
cout << str_5 << endl;
return 0;
}
输出结果为:
12345678
12345678
34567
abcde
XXXXX
12345678
获取string内元素
在通常情况下,string 是 C++ 中的字符串。字符串是一种特殊类型的容器,专门用来操作字符序列。
字符串中元素的访问是允许的,一般可使用两种方法访问字符串中的单一字符:下标操作符[] 和 成员函数at()。两者均返回指定的下标位置的字符。第 1 个字符索引(下标)为 0,最后的字符索引为 length()-1。
PS:
1、下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 ‘\0’)是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 ‘\0’。
2、函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。
#include <iostream>
#include <string>
int main()
{
const std::string cS ("c.biancheng.net");
std::string s ("abode");
char temp =0;
char temp_1 = 0;
char temp_2 = 0;
char temp_3 = 0;
char temp_4 = 0;
char temp_5 = 0;
temp = s [2]; //"获取字符 'c'
temp_1 = s.at(2); //获取字符 'c'
temp_2 = s [s.length()]; //未定义行为,返回字符'\0',但Visual C++ 2012执行时未报错
temp_3 = cS[cS.length()]; //指向字符 '\0'
temp_4 = s.at (s.length ()); //程序异常
temp_5 = cS.at(cS.length ()); //程序异常
std::cout << temp <<temp_1 << temp_2 << temp_3 << temp_4 << temp_5 << std::endl;
return 0;
}
string比较
字符串可以和类型相同的字符串相比较,也可以和具有同样字符类型的数组比较。
Basic_string 类模板既提供了 >、<、==、>=、<=、!= 等比较运算符,还提供了 compare() 函数,其中 compare() 函数支持多参数处理,支持用索引值和长度定位子串进行比较。该函数返回一个整数来表示比较结果。如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。
PS:字符串默认的比较原则是按照字典序;
对于参加比较的两个字符串,任一个字符串均不能为 NULL,否则程序会异常退出;
上一篇: php二维数组转一维数组的函数有哪些
下一篇: css如何让导航栏变透明