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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值