一.string型字符串的声明,初始化和赋值;
首先头文件:
#include <iostream>
#include <string>
using namespace std;
1.字符串的声明和初始化方式
string s1="abcdefg";//初始化
string s2(s1);//拷贝构造函数
string s3("abcd");
string s4(4,'a');//生成包含4个字符a的字符串“aaaa”
string s5('a','c');//string s(begin,end)不包含end的
string s6(s1,4);//将s1内的前4个字节作为s6的初值
2.string型字符串的基本操作函数
(1)大小和容量函数
a)现有的字符数:函数是size()和length(),它们差别不大,还有Empty()用来检查字符串是否为空
b)max_size() :指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常 c)capacity():重新分配内存之前string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定, 默认参数为0,这时候会对string进行非强制性缩减。
( 2 ).C++字符串和C字符串的转换函数:
可以使用data()、c_str()和copy()实现转化.
data()函数: 以字符数组的形式返回字符串内容,但并不添加’\0’。
c_str()函数: 返回一个以‘\0’结尾的字符数组.
copy()函数: 把字符串的内容复制或写入既有的c_string或字符数组内。C++字符串并不以’\0’结尾。
( 3 )元素存取函数:
我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range异常。 有一个例外不得不说,const string a;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较,(如str<"hello")。
在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一得
比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。
同时,string ("aaaa") <string(aaaaa)。另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。
返回一个整数来表示比较结果, 返回值意义如下:0-相等 〉0-大于 <0-小于。
举例如下:
string s("abcd");
s.compare("abcd"); //返回0
s.compare("dcba"); //返回一个小于0的值
s.compare("ab"); //返回大于0的值
s.compare(s); //相等
s.compare(0,2,s,2,2); //用"ab"和"cd"进行比较 小于零
s.compare(1,2,"bcx",2); //用"bc"和"bc"比较。
(5).更改内容函数:
赋值:
第一个赋值方法是使用操作符=,
如string str1 = "abcd";
string str2 = str1;
第二个赋值方法是使用assign函数:
s.assign(str); //
s.assign("gaint"); //
s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串
s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
s.assign("nico",5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串
s.assign(5,'x’);//把五个x赋给字符串
清空:
方法一:s="";
方法二:s.clear();
方法三:s.erase();
增加字符:
方法一:+=、
方法二:append()、
方法三:push_back()。
举例如下:
方法一:+=、
s+=str;//加个字符串
s+="my name is jiayp";//加个C字符串
s+=’a’;//加个字符
方法二:append()、
s.append(str);
s.append(str,1,3);//
s.append(str,2,string::npos)//
方法三:push_back()。
s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单.