C字符串和标准的C++string类
一、C字符串
c字符串是char类型的数组。char str[MAX]
1.在c++中并没有内置的机制保证程序不会出现数组元素个数超出数组大小的情况。
cout<<setw(MAX)<<str; setw指定输入缓冲区允许的最大字符个数,用户即使输入了过多的字符,<<运算符也不会把他放到数组中。
2.cin.get():来读取包含空格的文本。这样的语法表示stream类的成员函数get(),而cin是这个类的对象。
cin.get()的第一个参数是存放输入字符串的数组地址;
第二个参数是指定了数组的最大尺寸,因此自动防止了缓冲区超出限制。
第三个参数是可以携带一个字符,告诉函数遇到后就停止读取,默认是换行字符(\n)。
strlen():得到c字符串的长度,头文件cstring;
strcpy(destination,source):复制字符串。
strcat():这个库函数将第二个参数的字符串加到第一个参数的字符串之后。
3.字符串数组:stringarray[ ][ ]
例如 star[DAYS][MAX]={“sunday”,”monday”,”tuesday”,”wendnesday”,”thursday”,”friday”,”saturday”};
这个数组的第一维DAYS表示数组中有多少个字符串;第二维MAX指定字符串的最大长度。
访问一个具体字符串的语法为:star[j]----只有第一维的下标。
注意:
1)MAX的定义是非比寻常的。如果要与封装的思想保持一致,则定义完全在类中使用的常量是最好的,因此为了达到这个目的使用全局变量是不恰当的。标准的C++可以在类中声明MAX: static const int MAX =10 ;有些编译器不支持,可以表示为:enum {MAX=10};
2)堆栈,内存是向下增长的,因此栈顶在低端,单元以相反的顺序从堆栈中弹出:先进后出,后进先出。
二、标准的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_frist_of():查找所有的字符组,并且返回他找到的第一个字符的位置。如:find_frist_of(“spde”)为查找这些字符”s“、”p“、”d“、”e“中在字符串中第一个出现的字符,并且返回该字符所在的值。
find_frist_not_of():查找第一个不属于所给出的字符组的字符,并返回该字符的位置。
4)erase():将子串从字符串中移除。
第一个参数:子串第一个字符所在的位置。
第二个参数:子串的长度。
5)replace():用一个字符串替换另一个字符串。
第一个参数:置换部分的起始位置;
第二个参数:要替代的原来字符串的字符个数;
第三个参数:用来替换的字符串。
6)insert():将第二个参数指定的字符串插到第一个参数提供的位置。
7)append():在句尾添加字符(’’),不是字符串。
第一个参数:要添加的字符个数;
第二个参数:要添加的字符。
8)compare():两个对象做比较,返回int类型数值(-1,0,1)。如 a.compare(0,2,b,0,2)
第一个参数:调用函数的对象字符串中开始的位置(0)
第二个参数:调用字符串比较的字符个数(2)
第三个参数:要比较的字符串(b)
第四个参数:b中的开始位置(0)
第五个参数:b字符串中要比较的字符个数(2)
9)substr():返回调用它的字符串的子串。
第一个参数:开始字符位置
第二个参数:返回字符的个数
10)at():类似于[]来从对象中取出单独的字符。参数为字符串中字符的位置。
*11)copy:将string对象复制为char类型的数组。实际上把string类编程c字符串。但记住:复制之后需要将一个空字符(’\0’)插入最后一个字符之后,char[lengeh]=0或char[length]=’\0’;
对比:在string类中:=相当于c字符串中的复制的作用,而copy是将string对象复制为char类型的数组。
12)length和size作用一样,都是返回字符串的长度。(size为适应STL而产生)