1、C字符串 c++
c字符串是char类型的数组。char str[MAX] 编程
1.在c++中并无内置的机制保证程序不会出现数组元素个数超出数组大小的状况。 数组
cout<<setw(MAX)<<str; setw指定输入缓冲区容许的最大字符个数,用户即便输入了过多的字符,<<运算符也不会把他放到数组中。 app
2.cin.get():来读取包含空格的文本。这样的语法表示stream类的成员函数get(),而cin是这个类的对象。 函数
cin.get()的第一个参数是存放输入字符串的数组地址; spa
第二个参数是指定了数组的最大尺寸,所以自动防止了缓冲区超出限制。 对象
第三个参数是能够携带一个字符,告诉函数遇到后就中止读取,默认是换行字符(\n)。 内存
strlen():获得c字符串的长度,头文件cstring; ci
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)堆栈,内存是向下增加的,所以栈顶在低端,单元以相反的顺序从堆栈中弹出:先进后出,后进先出。
2、标准的C++string类1.string对象的定义:
string类的构造函数:
string(const char *s); //用c字符串s初始化
string(int n,char c); //用n个字符c初始化
此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而没法表达时会抛出length_error异常
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标准。
string类的输入输出操做:
string类重载运算符operator>>用于输入,一样重载运算符operator<<用于输出操做。
函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,
以换行符' '分开。
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而产生)
C++string类经常使用函数
string类的字符操做:
const char & operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。
const char *data()const;//返回一个非null终止的c字符数组
const char *c_str()const;//返回一个以null终止的c字符串
int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目
string的特性描述:
int capacity()const; //返回当前容量(即string中没必要增长内存便可存放的元素个数)
int max_size()const; //返回string对象中可存放的最大字符串的长度
int size()const; //返回当前字符串的大小
int length()const; //返回当前字符串的长度
bool empty()const; //当前字符串是否为空
void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部