欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ STL string类

程序员文章站 2022-03-23 15:16:45
...

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,否则程序会异常退出;

相关标签: C++ STL String