string类型也是在标准库中定义的,可以看做特殊的容器,除了一些特殊的操作外,string类型提供与vector相同的操作。同时他还有自己独有的操作,这里只介绍string所独有的操作。与vector不同的是:string不能使用front、back和pop_back操作。
1、string的构造方法
/******************************/
string s1;
string s2(5,'a');
string s3(s2);
string s4(s3.begin(),s3.end());
/******************************
string 其他的构造方法*/
char *cp = "abcdefgh";
char arr1[] = "aa";
char arr2[] = {'a','a'};
string s6(cp);
string s7(cp,4);//s7 = "abcd"
string s8(s7,1);//s8 = "bcd"从下标1开始以后的字符
string s9(s7,1,2);//s9 = "bc"从下标1开始后面2个字符
string s(arr1);//可以
string s(arr2);//错误
2、修改string对象的其他方法(与容器共有的操作不再介绍)
容器的修改操作主要是基于迭代器的为参数,string还支持基于下标位置的参数pos。
s.insert(pos,n,c); //在下标pos前插入n个字符c
s.insert(pos,s2); //在下标pos前插入s2的副本
s.insert(pos,s2,pos2,len); //在下标pos前插入s2中从pos2开始的len个字符
s.insert(pos,cp,len); //在下标pos前插入cp所指的数组的前len个字符
s.insert(pos,cp) //在下标pos前插入cp所指的以空字符结束的字符串;
s.assign(s2); //用s2副本替换
s.assign(s2,pos2,len); //用s2中下标pos2开始的len个字符替换s
s.assign(cp,len); //用cp指向的数组的前len个字符替换s
s.assign(cp); //用cp指向的以空字符结束的字符串替换s
s.erase(pos,len); //删除从下标pos开始的len个字符
3、只适用于string的操作(1)获取string对象的子串
substr函数:返回string对象s的部分或者全部副本
s.substr(pos,n); //从下标pos开始的n个字符
s.substr(pos);
s.substr();
(2)append和replace函数
s.append(args); //将args串接在s的后面
s.replace(pos,len,args); //删除pos后面的len个字符,用args串替换之 在这个版本中,args串不能为b2和e2
s.replace(b,e,args); //删除迭代器b和e之间的字符,用args串替换之在这个版本中,args串不能为s2、pos、len2。要和前面两个参数统一
args串可以使以下几种:
s2;
s2, pos2, len2;
cp;
cp, len2;
n, c;
b2, e2;
共6个append重载版本和10个replace重载版本。
4、string类型的查找操作
s.find(args); //在s中查找args的第一次出现
s.rfind(args); //在s中查找args的最后一次出现
s.find_first_of(args); //在s中查找args的任意字符的第一次出现
s.find_last_of(args); //在s中查找args的任意字符的最后一次出现
s.find_first_not_of(args); //在s中查找第一个不属于args的字符
s.find_last_not_of(args); //在s中查找最后一个不属于args的字符
每个查找操作有4个重载版本:
c, pos; //在s中,从下标pos开始查找c
s2, pos; //在s中,从下标pos开始查找string对象s2
cp, pos; //在s中,从下标pos开始查找cp指针指向的以空字符结束的字符串
以上pos默认值都为0
cp, pos, n //在s中,从下标pos开始,查找指针所指数组的前n个字符
典型的应用:
string num("0123456789");
string name("ada4544ada");
string::size_type pos = 0;
while ((pos = name.find_last_of(num.pos)) != string::npos)
{
cout<<name[pos]<<endl;
++pos;
}
5、string对象的比较
string类型定义了(<, <=, >, >=, ==, !=)运算按照字典顺序判断string对象的大小
除了关系操作符,string还定义了一组compare操作,用于实现字典顺序的比较。类似于C语言中的库函数strcmp。
s.compare(s2);
s.compare(pos1, n1, s2);
s.compare(pos1, n1, s2, pos2, n2);
s.compare(cp); //cp指向以空字符结束的字符串
s.compare(pos1, n1, cp);
s.compare(pos1, n1, cp, n2);
返回值:
为正数 s大于args所代表的string对象s2
为负数 ...小于
为零 ...等于