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()

  • 相等:大小写敏感

  • 大小于:字典序

  • 长度不同,但字符对应:短<长

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

大小和容量(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)
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值