string类

  c语言在string.h中提供了一系列的字符串函数,c++提供了string类对字符串进行处理,它也能处理c风格的字符串。string实际上是模板具体化basic_string的一个typedef,同时省略了与内存管理的相关参数。
string类的构造函数

构造函数描述
string(const char * s)将string对象初始化为s指向的NBTS(以空字符结束的字符串)
string(size_type n, char c)创建一个包含n个元素的string对象,其中每个元素都被初始化为字符c
string(const string & str)将一个string对象初始化为string对象str(复制构造函数)
string()创建一个默认的string对象,长度为0(默认构造函数)
string(const char * s, size_type n)将string对象初始化为s指向的NBTS的前n个字符,即使超过了NBTS结尾
template string(Iter begin, Iter end)将string对象初始化为区间[begin, end)内的字符,其中begin和end的行为就像指针,用于指定位置,范围包括begin在内,但不包括end
string(const string & str, string size_type pos = 0, size_type n = npos)将一个string对象初始化为对象str中从位置pos开始到结尾的字符,或从位置pos开始的n个字符。
string(string &&str) noexcept这是c++新增的,它将一个string对象初始化为string对象str,并可能修改str(移动构造函数)
string(initializer_list il)这是c++新增的,它将一个string对象初始化为初始化列表il中的字符。

string类输入
对于c-风格字符串有3种方式:

char info[100];
cin >> info;
cin.getline(info, 100);
cin.get(info, 100);

对于string对象,有两种方式:

string stuff;
cin >> stuff;
getline(cin, stuff);

两个版本的getline都有一个可选的参数,用于指定使用哪个字符来确定输入的边界。

cin.getline(info, 100, ':');
getline(stuff, ':');

  在功能上,它们之间的主要区别在于string版本的getline将自动调整目标string对象的大小。使之刚好能够存储输入的字符。在设计上的区别是,读取c风格字符串的函数是istream类的方法,而string版本是独立的函数。
存在的限制因素是string对象的最大允许长度,由常量string::npos指定,最大为unsigned int值。因此对于普通的交互式输入,这不会带来实际的限制;但如果是读取整个文件到string对象中,这可能成为限制因素。另外一个限制因素就是可以使用的内存量。
  输入流对象有一个统计系统,用于跟踪流的错误状态。在系统中,检测到文件尾后将设置eofbit寄存器,检测到输入错误将设置failbit寄存器,出现无法识别的故障时将设置badbit寄存器,一切顺利时将设置goodbit寄存器。

  通常,对于程序要查找的文本文件,应将其放在可执行程序或项目文件所在的目录中;否则必须提供完整的路径名。在windows系统中,c-风格字符串中的转义序列\表示一个斜杠:
fin.open(“C:\CPP\progs\test.txt”)

  String类对全部6个关系运算符都进行了重载。对于每个关系运算符,都以三种方式被重载,以便能够将string对象与另一个string对象、c-风格字符串进行比较,并能够将c-风格字符串与string对象进行比较。

可以以多种不同的方式在字符串中搜索给定的字符串或字符。重载的find()方法:

方法原型描述
size_type find(const string & str, size_type pos = 0) const从字符串的pos位置开始,查找子字符串str, 如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos
size_type find(const char *s, size_type pos = 0) const从字符串的pos位置开始,查找子字符串s,如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos
size_type find(const char *s, size_type pos = 0, size_type n)从字符串的pos位置开始,查找s的前n个字符组成的子字符串,如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos
size_type find(char ch, size_type pos = 0) const从字符串的pos位置开始,查找字符ch,如果找到,则返回该字符首次出现的位置;否则,返回string::npos

还有一些相关方法,它们的重载特征标都与find()方法相同。
rfind() :查找字符串或字符最后一次出现的位置;
find_first_of() :在字符串中查找参数中任何一个字符首次出现的位置;
find_last_of() : 在字符串中查找参数中任何一个字符随后一次出现的位置;
find_first_not_of() :在字符串中查找第一个不包含在参数中的字符;

string库提供的其它功能
1.删除字符串的部分或全部内容;
2.用一个字符串的部分或全部内容替换另一个字符串的部分或全部内容;
3.将数据插入到字符串中或删除字符串中的数据;
4.将一个字符串的部分或全部内容与另一个字符串的部分或全部内容进行比较;
5.从字符串中提取子字符串;
6.将一个字符串中的内容复制到另一个字符串中;
7.交换两个字符串中的内容;
这些函数中的大多数都被重载,以便能够同时处理c-风格字符串和string对象。

open()方法要求使用一个c-风格字符串作为参数;c_str()方法返回一个指向c-风格字符串的指针。

字符串种类
string库实际上是基于一个模板类的:

template<class charT, class traits = char _traits<charT>,
		class Allocator = allocator<charT>>
basic_string {...};

模板basic_string有4个具体化,每个具体化都有一个typedef名称:

typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
typedef basic_string<char16_t> u16string;
typedef basic_string<char32_t> u32string;

  traits类描述关于选定字符的特定情况,如如何对值进行比较。对于wchar_t、char16_t、 char32_t、 char类型,有预定义的char_traits模板具体化,它们都是traits的默认值。Allocator是一个管理内存分配的类。对于各种字符类型,都有预定义的allocator模板具体化,它们都是默认的。它们使用new的delete。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值