主要内容:
输入输出、查找、迭代器
字符串输入输出操作
流运算符
"<<" 和 ">>" 提供了C++语言的字符串输入和字符串输出功能。
- "<<" 可以将字符插入到一个流对象中(例如 ostream);
- ">>" 可以实现将以空格或回车为 "结束符" 的字符序列读入到对应的字符串中,并且开头和结尾的空白字符不包括进字符串中。
getline() 函数
getline() 函数可将整行的所有字符读到字符串中,并且读取的方式更加多样。该函数的原型包括两种形式:
//包含2个参数:第1个参数是输入流对象_Istr;第2个参数是保存输入内容的字符串_Str template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(basic_istream<CharType, Traits>& _Istr, basic_string<CharType,Traits, Allocator>& _Str); //包含3个参数:第1个参数是输入流对象_ Istr,第 2 个参数保存输入的字符串_Str,第3个参数指定的分界符_Delim。 template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(basic_istream<CharType, Traits>& _Istr, basic_string<CharType, Traits, Allocator>& _Str, CharType _Delim);
在读取字符时,遇到文件结束符、分界符、回车符时,将终止读入操作,且文件结束符、分界符、回车符在字符串中不会保存;当已读入的字符数目超过字符串所能容纳的最大字符数时,将会终止读入操作。
字符串查找函数
在STL中,字符串的查找可以实现多种功能:
- 搜索单个字符、子串;
- 实现前向搜索、后向搜索;
- 分别实现搜索第一个和最后一个满足条件的字符(或子串);
string::npos 静态成员常量
static const size_t npos = -1;
npos
是静态成员常量值,值为size_t类型可能的最大值。
当这个值在字符串成员函数中的长度或者子长度被使用时,该值表示“直到字符串结尾”。作为返回值他通常被用作表明没有匹配。
此常量的值定义为-1
,由于size_type是无符号类型,故需转换为无符号整数类型,因此它是此类型可表示值的最大值。不过实际值还是取决于size_type的实际定义类型,即无符号整型 unsigned int
的-1或无符号长整型 unsigned long
的-1。
find() 和 rfind()
find() 或 rfind() 函数用于在源串中查找完全相同的字符(串)或子串。
find() 或 rfind() 函数没有搜索到期望的字符(或子串),则返回 npos
;若搜索成功,find() 返回搜索到的第 1 个字符或子串的位置,rfind() 返回逆向搜索到的第 1 个字符或子串的位置。
find() 的使用方法:
在下面的代码中,约定使用以下标识符带代表相应变量或对象:
str表示原始string对象,sstr表示另一个string对象;cstr表示C风格字符串
ch表示char字符;pos为下标表示的位置
注:“cstr的前n个字符” 基本都可以替换为
char*
指针,类似 [_Ptr, _Ptr + _Count)
//在源串str中下标pos位置(默认为0)开始查找1个字符ch str.find(ch, pos=0); //在源串str中下标pos位置(默认为0)开始查找C风格字符串cstr str.find(cstr, pos=0); //在源串str中下标pos位置开始查找C风格字符串cstr的前num个字符的子串 str.find(cstr, pos, num); //在源串str中下标pos位置开始查找字符串对象sstr str.find(sstr, pos=0);
rfind() 函数的功能和 find() 函数的功能类似,参数情况也类似,不同之处pos默认为npos,逻辑为在源串中下标pos位置之前逆向查找。
find_first_of() 和 find_last_of()
find_first_of() 函数和 find_last_of() 函数的使用方式、参数表与上述基本相同。
find_first_of() 函数最容易出错的地方是和 find() 函数搞混。find_first_of() 最大的区别就是如果在一个源串中查找另一个字符串,如果源串中含有另一个字符串中的任何字符(或当实参为字符类型时,源串中含有指定字符),就会查找成功,并返回任何一个字符首次在源串中出现的位置(find_last_of() 与 rfind() 的逆向查找相似)。
find_first_not_of() 和 find_last_not_of()
find_first_not_of() 函数和 find_last_not_of() 函数的使用方式、参数表与上述基本相同。
find_first_not_of() 函数可实现在源串中搜索与指定字符(串)不相等的第 1 个字符;find_last_not_of() 函数可实现在源串中搜索与指定字符(串)不相等的最后 1 个字符(与 rfind() 的逆向查找相似)。
string类的迭代器
迭代器的定义
string::iterator 迭代器名称;
几个常用的迭代器
begin() 和 end() 为正向迭代提供支持;rbegin() 和 rend() 为反向迭代提供支持。
begin() 返回指向字符串第一个字符的迭代器;
end() 返回指向字符串最后一个字符串的后一个位置的迭代器;
rbegin() 返回指向字符串最后一个字符的迭代器;
rend() 返回指向字符串第一个字符的前一个位置的迭代器。
迭代器的使用:
for (string::iterator iter = str.begin(); iter != str.end(); iter++) { //…… }
有关使用到迭代器的成员函数,具体可以参看文章:C++ string类(上)