二、标准的C++string类
string类在很多地方改动了c字符串。首先,在创建数组时不必再为它的大小是否能够容纳字符串变量而担心,因为string类接管了所有的内存管理任务。其次,string类允许使用重载运算符,因此可以使用(+、=、==、<、>)等运算符操作字符串对象:s3=s1+s2;
1.string对象的定义:
1)string s(“man”); 2)string s=”man”; 3)string s;(空的string变量)
2.常用的成员函数(限所看书中用法):
1) swap():它的功能是将两个字符串对象的值做调换,一个对象调用它,另一个对象作为它的参数。如 s1.swap(s2);
2)getline():在string类中它能够读取带有空格的多行输入。
getline()的第一个参数是流对象,这里将会出现输入信息,在此处是cin。
第二个参数是放置文本的string对象obj;
第三个参数是指定终止输入的字符,默认为换行符”\n“.
getline()与c字符串的函数get()是相似的,只是前者是string标准。
3)find():在调用它的字符串对象中查找作为参数的字符串,(最左边的字符位置的编号是0)。find(const string &s ,int pos = 0)从pos开始查找子字符s,并返回子字符 串第一次出现的位置
find_frist_of():查找所有的字符组,并且返回他找到的第一个字符的位置。如:find_frist_of(“spde”)为查找这些字符”s“、”p“、”d“、”e“中在字符串中第一个出现的 字符,并且返回该字符所在的值。
find_frist_not_of():查找第一个不属于所给出的字符组的字符,并返回该字符的位置。
4)erase():将子串从字符串中移除。
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串
5)replace():用一个字符串替换另一个字符串。
string &replace(int p0, int n0,const char *s, int n);//删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符
6)insert():将第二个参数指定的字符串插到第一个参数提供的位置。
string &insert(int p0,const string &s, int pos, int n);//前4个函数在p0位置插入字符串s中pos开始的前n个字符
7)append():在句尾添加字符(’’),不是字符串。
string &append(const char *s);//把s连接到当前字符串的结尾
string &operator +=(const string &s);//把s连接到当前字符串的结尾
8)compare():两个对象做比较,返回int类型数值(-1,0,1)。//运算符">","<",">=","<=","!="均被重载用于字符串的比较;
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始
的n2个字符组成的字符串的大小
9)substr():返回调用它的字符串的子串。
string substr(int pos = 0, int n = npos) const; // 返回pos开始的n个字符组成的字符串
10)at():类似于[]来从对象中取出单独的字符。参数为字符串中字符的位置。
char &at(int n); //operator[]和at()均返回当前字符串中第n个字符的位置
//但at函数提供范围检查,当越界时会抛出out_of_range异常
//下标运算符[]不提供检查访问。
*11)copy:将string对象复制为char类型的数组。实际上把string类编程c字符串。但记住:复制之后需要将一个空字符(’\0’)插入最后一个字符之后,char[lengeh]=0 char[length]=’\0’;
int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目
对比:在string类中:=相当于c字符串中的复制的作用,而copy是将string对象复制为char类型的数组。
12)length和size作用一样,都是返回字符串的长度。(size为适应STL而产生)
13)类的属性描述
int capacity() const; //返回当前容量(即string中不必增加内存即可存放的元素个数)
bool empty() const;//当前字符串是否为空
void resize(int len, char c); //把当前字符串大小置为len,如果len比原字符串小,则从后面开始截断,如果比原字符串大,用字符c填充不足的部分。