String类的函数及运用,主要包括在头文件“#include“string””里。下面是关于我对string类运用的一些理解。
1.string声明字符串:
1) string s //声明一个空字符串
2) string str(“12345678xxxxx”);//声明一个字符串并在括号内定义
3) string str_1(str);//声明一个字符串并将str字符串的内容复制到str_1中
4) 字符串还可以用 str=“123456”的方式来进行重新赋值
2.string字符串长度
在测量字符串的长度时,有两个函数,size()和length(),且两个函数都是返回字符串的字符数(不包括“\0”)
如字符串string str(“12345678”);可以用str.length()和str.size()返回字符串的长度,对于该字符串两者都返回8;下述代码展示了如何使用者两个函数
string str_1("12345678");
size=str_1.size();
length=str_1.length();
3.string字符串的遍历
获取字符串单个元素的方法有两种,一是用字符数组的方法,即,将字符串当做字符数组,用数组的方式来遍历;二是用函数at()来遍历。下述代码展示了如何遍历字符串
string s("123456");
for(int i=0;i<s.length();i++)
cout<<s[i];
cout<<endl;
for(int i=0;i<s.size();i++)
cout<<s.at(i);
cout<<endl;
4.string字符串的比较
string字符串比较是用的compare()函数,若参与比较的两个串值相同,则函数返回 0;若字符串 S 按字典顺序要先于 S2,则返回负值;反之,则返回正值。
string s1("abcdef");
string s2("abcdka");
string str("abc");
int a=s1.compare(s2);//完整的s1和s1比较
int b=s1.compare(0,4,s2,0,4); //s1的前四个字符与s2的前四个字符比较
int c=s1.compare(0,3,str);//s1的前三个字符与str比较
5.string的一些常用函数
1)assign()函数(赋值函数)
string s1("123456");
string s2;
s2.assign(s1);//将s1全部赋值给s2
s2.assign(s1,1,5);//将子串23456赋值给s2;
s2.assign("123456",5);//将字符串“123456”的前五个字符赋值给s2
s2.assign(5,'c');//给s2赋值为五个c
2)insert()函数(插入函数)
const string a("123456");
string b("abc");
b.insert(1,a);//**在b字符串的第一位(也就是a)后面插入a字符串的全部内容**
cout<<b<<endl;
b="abc";
b.insert(1,a,3,3);//**在第一位后面插入a字符串第3个字符后面的三个字符即456**
cout<<b<<endl;
b="abc";
b.insert(1,5,'c');//第一位后面插入五个c
cout<<b<<endl;
b="abc";
b.insert(1,"123456",3);//在第一位后面插入字符串“123456”的前三个字符
cout<<b<<endl;
还可以使用迭代器来进行操作,这里我就不再细说了,实际上大部分的string函数都可以用迭代器进行操作
3)append函数(追加函数)
string A;
string B;
A="ello";
B="123456";
A.append(B);//把B字符串的全部内容追加到A后面
cout<<A<<endl;
A="ello";
A.append(B,2,4);//把B从第2个字符后的4个字符追加到A后,即,3456
cout<<A<<endl;
A="ello";
A.append(5,'c');
cout<<A<<endl;//在A后追加5个c
5) replace函数(替换)
string s1("123456");
string s2("abcdefg");
s1.replace(1,4,s2);//将第一位后面的四个字符替换为s2,结果为1abcdefg6;
cout<<s1<<endl;
s1="123456";
s1.replace(1,5,"abcdef",3); //将第一个字符后的三个字符替换为字符串的前三个字符,结果为1abc
s1="123456";
s1.replace(1,4,s2,2,5);//将s1中第一位后面的4个字符替换为s2中第二位后面的五个祖父,结果为1cdefg6
s1="123456";
s1.replace(1,4,5,'c');//将第一位后面的四个字符替换为 五个c
6) erase函数(删除函数)
string s1("abcdef");
s1.erase(0,3);//删除前三个字符
s1="abcdef";
string::iterator it=s1.begin()+2;
s1.erase(it); //删除迭代器it处的字符,即"c";
s1="abcdef";
string::iterator first=s1.begin()+1;
string::iterator last=s1.end();
s1.erase(first,last);//删除迭代器first和last之间的字符,结果只剩a`
7) find()函数和 rfind()(查找函数)
string::size_type m=str.find('P',5);//函数的第1个参数是被搜索的字符、第2个参数是在源串中开始搜索的下标位置
string::size_type rm=str.rfind('P',5);//rfind的参数与find一致,但是是逆序查找
string::size_type n=str.find("some",0);//搜索字符串
string::size_type mo=str.find("drugs",0,5);//5表示被搜索字符串的个数
若查找 find() 函数和其他函数没有搜索到期望的字符(或子串),则返回 npos;若搜索成功,则返回搜索到的第 1 个字符或子串的位置。其中,npos 是一个无符号整数值,初始值为 -1。当搜索失败时, npos 表示“没有找到(not found)”或“所有剩佘字符”。
rfind是逆序查找,返回逆序的第一个字母