string类的头文件:
#include<string>
string对象的初始化:
(1)直接给一种字符串常量
string s1("S1");
string s2="S2";
(2)其他方法
string s1(3,'1');
s1就是111
(3)字符赋值给string对象
string s;
s='n';
(4)错误方法
string e1='c';
//不能用字符去初始化string
string e2('u');
string e3=22;
string e4(8);
string类的基础函数:
(1)长度:
string s("Hello");
s.length();
(2)赋值
string s1("Hello"),s2,s3,s4;
s2=s1;
//用“=”赋值
s3.assign(s1);
//assign赋值
s4.assign(s1,1,3);
//s1从下标1开始的字符开始复制3个字符到s4中
(3)访问string中的字符
s1.at(10);
//访问s1的第10个字符
其实s1[10]也可以对string对象进行访问,但是at函数会做范围检查,如果超出范围的话就会抛出异常,但是下标运算符[]不做范围检查
(4)连接
s1=s1+s2;
s1.append(s2);
//等价于s1=s1+s2
s1.append(s2,3,s2.size());
从下标3开始复制s2.size()字符,如果字符内没有足够的字符,那么就复制到最后一个字符
(5)比较
=>,<=,==,>,<
int flag;
flag=s1.compare(s2);
flag=s1.compare(1,2,s2,0,3);
//s1下标从1-2,s2下标从0-3进行比较
(6)求子串
s2=s1.substr(4,5);
//s2为s1从下标4开始的5个字符,如果超过了字符串的长度,那就到最后一个截止
(7)交换
s1.swap(s2);
交换s1和s2
(8)查找子串
s1.find("a");
s1.find("s",2);
从前向后找查找第一次出现“a”的下标,如果找不到就返回string::npos
从下标2开始查找“s”第一次出现的位置
s1.rfind("a");
从后向前找查找第一次出现“a”的下标,如果找不到就返回string::npos
s1.find_first_of("abcd");
从前向后在s1中查找字符‘a’、‘b’、‘c’、‘d’任意一个字符第一次出现的位置。如果找不到就返回string::npos
s1.find_last_of("abcd");
从后向前在s1中查找字符‘a’、‘b’、‘c’、‘d’任意一个字符第一次出现的位置。如果找不到就返回string::npos
s1.find_first_not_of("abcd");
从前向后在s1中查找字符‘a’、‘b’、‘c’、‘d’任意一个字符不是第一次出现的位置。如果找不到就返回string::npos
s1.find_last_not_of("abcd");
从后向前在s1中查找字符‘a’、‘b’、‘c’、‘d’任意一个字符不是第一次出现的位置。如果找不到就返回string::npos
(9)删除
s1.erase(2);
删除下标2及之后的字符
(10)替换
s1.replace(1,2,"111");
将s1中下标从1开始的2个字符换成"111"
s1.replace(1,2,"111",1,2);
将s1中下标从1开始的2个字符换成"111"中下标1开始的2个字符
(11)插入
s1.insert(5,s2);
将s2插入s1下标为5的位置
s1.insert(5,s2,5,3);
将s2从下标5开始的3个字符插入s1下标2的位置
(12)转换成C语言式char*字符串
s1.c_str();
s1.c_str()返回const char*类型的字符串,且该字符串以‘\0’结尾
s2=s1.data();
s1.data()返回char*类型的字符串,对s1进行修改可能会导致s2出错
(13)字符串拷贝
s1.copy(p2,5,0);
s1.copy(p2,5,0)表示从s1的下标0的字符开始制作一个最长长度为5的字符串副本将其值赋值给p2。