《C++学习笔记》.STL.string

6 篇文章 0 订阅
2 篇文章 0 订阅

引言

字符串是笔试中常考的题型, C++ 提供了以下两种类型的字符串表示形式:

  •               C 风格字符串char*
  •               C++ 引入的 string 类类型

C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};//形式1
char greeting[] = "Hello";                         //形式2

         C++中有大量的的函数用来操作以 null 结尾的字符串:

 num

     function                                                                      objective
    1   strcpy(s1, s2);复制字符串 s2 到字符串 s1。
    2strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
    3strlen(s1);返回字符串 s1 的长度。
    4strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
    5strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
    6strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

后来,ISO/ANSI C++98标准通过添加string类扩展了C++库。

        string类类型是C++中提供的一个内建数据类型,按照类的方式进行动态管理字符串,可替代C语言中char数组。string和 vector、list一样是C++标准库的一个重要的部分,底层是一种顺序表的结构,元素是char类型的字符,是 STL 中 basic_string 模板实例化得到的模板类,其定义如下:

typedef basic_string <char> string;

       之所以抛弃C 风格字符串char*而引入 string 类类型,是因为与前者相比:
(1)不必担心内存是否足够、字符串长度;
(2)作为一个泛型类出现,集成了许多操作函数满足大多数需要,如:重载了一些操作符,可用“ =“ 进行赋值操作,用“==“、 ">"、 “<”、 “>=”、“<=”  进行比较,用“+“ 、 “+=”做串联;封装了了一些成员函数,可以方便的完成替换、插入、删除,比较、提取、复制、交换操作。
(3)作为STL中的一种数据结构,得到STL中算法的支持;
(4)可以很好的与cin、cout、fstream、sstream等类型兼容。
       总的来讲,使用起来要比C 风格字符串char*方便许多

string的使用

1. 导入string类型

要使用string类,(1)必须在程序中包含头文件string;(2)string类位于名称空间std中,因此您必须提供一条using编译指令,或者使用std::string来引用它。

#include<string>     //导入头文件
using namespace std; //引入命名空间方法1
using std::string;   //引入命名空间方法2

2. string初始化(实例化)

string str; //默认构造,把str初始化为一个空字符串

string str(int num,char c);//普通构造,生成一个字符串,包含num个c字符

string str(string str_other); //拷贝构造,将字符串str_other当做str的初值

string str=str_other;//拷贝构造,将字符串str_other当做str的初值

string str="xxxxx";//拷贝构造,将字符串字面量当做str的初值

string str(string str_other,int stridx); //拷贝构造,将字符串str_other[stridx...end]当作字符串str的初值

string str(string str,int stridx,int strlen); //拷贝构造,将字符串
str_other[stridx...stridx+strlen-1] 当作字符串str的初值

string str(char* cstr);//拷贝构造,将c风格字符串cstr作为str的初值

string str(char* cstr,int len); //拷贝构造,将c字符串cstr前len个字符作为字符串str的初值

string str(str_other.begin(),str_other.end()) //拷贝构造,以区间beg;end(不包含end)内的字符作为字符串s的初值

s.~string(); //销毁所有字符,释放内存

3. string类型的内置函数

                                                                                           string 函数列表

函数名描述
iterator begin();得到指向字符串开头的Iterator
iterator end();得到指向字符串结尾的Iterator
const reverse_iterator rbegin();得到指向反向字符串开头的Iterator
const reverse_iterator rend();得到指向反向字符串结尾的Iterator
size_t size();得到字符串的大小
size_t length();和size函数功能相同
size_t max_size();字符串可能的最大大小
size_t capacity();在不重新分配内存的情况下,字符串可能的大小
bool empty();判断是否为空

char& operator[] (size_t pos);//可为左值

const char& operator[] (size_t pos) const;//不懂为何这样重载

取第几个元素,相当于数组
const char* c_str() const;
eg:  std::string str ("Please split this sentence into tokens");
       char * cstr = new char [str.length()+1];
       std::strcpy (cstr, str.c_str());
取得C风格的const char* 字符串
data取得字符串内容地址
string& operator=赋值操作符
reserve预留空间
void swap交换函数
string& insert插入字符
string& append追加字符
string& push_back追加字符
string&  operator+=+= 操作符
string& erase删除字符串
clear清空字符容器中所有内容
resize重新分配空间
string& assign和赋值操作符一样
string& replace替代
copy字符串到空间
int find查找
int rfind反向查找
int find_first_of查找包含子串中的任何字符,返回第一个位置
int find_first_not_of查找不包含子串中的任何字符,返回第一个位置
int find_last_of查找包含子串中的任何字符,返回最后一个位置
find_last_not_of查找不包含子串中的任何字符,返回最后一个位置
string substr得到字串
compare比较字符串
operator+字符串链接
bool operator==判断是否相等
bool operator!=判断是否不等于
bool operator<判断是否小于
bool operator<=判断是否小于等于
bool operator>判断是否大于
bool operator>=判断是否大于等于
istream operator>>从输入流中读入字符串
ostream operator<<字符串写入输出流
getline从输入流中读入一行

参  考:

C++ 字符串 | 菜鸟教程                            (C++ 字符串)

33-C++基础string类介绍_青木年华-CSDN博客.html       (33-C++基础string类介绍)

C++中string详解_sunprice的博客-CSDN博客_string在c++是什么意思.html                (C++中string详解)

STL 源码分析之string(一)基础篇_jmhIcoding-CSDN博客_stl string源码.html                (STL 源码分析之string(一)基础篇)

c++中string类的源代码_随意的风的专栏-CSDN博客                  (c++中string类的源代码)

http://www.cplusplus.com/reference/string/string                                   (C++ Reference:string)  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值