STL - < string >

STL - < string >

string 表示可变长字符串,可以对应于c语言中的char数组,使用前需要包含string头文件。


string::size_type

string class新定义的一种无正负号整数型别。

允许使用auto,decltyp()来获得std::sizetype类型。


相关型别

模板类别

basic_string<> 被定义为所有字符串型别的基本模板类别。
第一参数:单个字符所属型别。
第二参数:带有默认值,特性。提供所有字符核心操作。指定了复制和比较的做法。
第三参数:内存模式。通常为“缺省的内存模型allocator”

template  < class T , class traits = char_traits < charT > , class Allocator = Allocator < charT > > 
class basic_string;

string & wstring

wstring 是针对wchar_t的特化版本。

typedef basic_string < char > string;
typedef basic_string < wchar_t > wstring;

  • c++语言中字符串字面值并不是string对象。

细部描述

构造函数

  • string strings 创作空串
  • string s(str) 拷贝
  • string s(str,stridx) str从stridx开始拷贝
  • string s(str stridx,strlen) 拷贝一定长度
  • string s(chars,chars_len) 前len个字符作为除值
  • string s(num,c) 生成num个c
  • string s(beg,end)区间[beg,end]

析构函数

  • s.~string() 销毁,释放内存

元素存取(Element Access)

  • at()
    string 对象允许利用下标(opreator[ ])操作。但并不检查是否有效,但at()会。无效时会弹出out_of_range异常。

更改内容(Modifiers)

赋值(Assignments)

  • assign() =,用多个参数描述新值。

交换(Swapping Values)

  • swap() 常数复杂度。

插入和移除(Inserting & Removing)

+=,append(),push_back()均可添加字符。

  • insert()
    不接受“索引+单独字符”,需要传入string对象或额外数字。
  • append() & push_back()
    append()可使用多个参数指定添加值。可以将两个迭代器指定的字符添加至尾部。
  • erase() 删除
  • clear() 移除全部
  • resize() 改变字符数量
  • replace() 替换

比较

以>,<,>=,<= 来比较,得到结果是根据“当前字符特性”,将字符依照字典序依次比较。

  • compare()

  • 相等:大小写敏感

  • 大小于:字典序

    扫描二维码关注公众号,回复: 12441840 查看本文章
  • 长度不同,但字符对应:短<长

  • 第一对相异字符比较作为结果。

大小和容量(size & capacity)

  • size() & length() 等效。
  • max_size()
    string包含一块单独内存区块中的所有字符,与机器本身限制有关。返回最大值-1:方便添加’\0’,并且最大值本身是npos。
    一旦使用超过max的对象,mength_error的异常会被抛出。
  • capacity() 重新分配内存前能包含最大字数。
  • empty() 快于长度大小函数。
  • reserve() 保留一定量内存以容纳一定量字符

getline()

在遇到输入的间隔字符(空格,制表符)需要保留至字符串里时,可以使用getline(cin,str)读取一整行。

getline()函数的参数是输入流与string对象,返回流参数(同while(cin>>str))。

函数从给定输入流读取,直到换行符(换行符被读入),将读取内容存入对象(不存换行符)。

(如果输入一开始就为换行,所得到的即为空string)

提取

  • copy() 复制为c-string
  • c_str() 以c-string形式返回
  • data() 以字符数组形式返回
  • substr() 返回子串
  • get_allocator() 返回配置器

搜索函数(Search & Finding)

  • find()
  • rfind() (逆向搜寻)
  • find_first_of()
  • find_last_of()
  • find_first _not_of()
  • find_last_not_of()

参数方案

  • 第一参数:被搜寻对象
  • 第二参数:起点
  • 第三参数:搜寻字符个数

string::npos

  • 返回值为string::size_type。

因为size_typr为无正负整数,而npos被设计为-1,于是npos就成为了该型别最大无符号数。实际值仍取决于size_type实际定义。
事实上(unsigned long) -1 和 (unsigned short) -1不同。为了避免,可以直接检验搜寻是否失败:

if(s.find() == std::string::npos){}

或自行定义npos: const int NPOS = -1;


strings 对迭代器的支持

string迭代器是 random access(随机存取)迭代器。

迭代器操作函数

  • s.begin()
  • s.end()
  • s.rbegin()
  • s.rend()
  • string s(beg,end)
  • s.append(beg,end)
  • s.assign(beg,end)
  • s.insert(pos,c)
  • s.insert(pos,num,c)
  • s.insert(pos,beg,end)
  • s.erase(pos)
  • s.erase(beg,end)
  • s.replace(beg,end,str)
  • s.replace(beg,end,num,c)
  • s.replace(beg,end,newBeg,newEnd)

猜你喜欢

转载自blog.csdn.net/qq_36682445/article/details/109062763