这里只是列举在看书的过程中觉得比较重点的知识
1 首先需要区分字符常量和字符串常量的区别,字符常量是单引号表示比如‘s’,在存储的过程中是存储其ASCii码,但是字符串常量是存储其在内存中的地址。
并且在末尾加上‘\0’表示结束。
2 strlen 函数计算字符串中字符的个数,不包含‘\0’,sizeof计算字符串数组的字节数。
3 在键盘用cin等输入字符串时会在末尾自动加上\0,同时以空格,换行符,制表符表示结束,同时比如使用换行符,也会进行存储。
4 如果需要对整行进行获取,那么应该使用cin.getline(name,20)其中name表示字符串数组,20表示可输入19个字符,这种方式以换行符表示结束,但是并不存储换行符
另一种使用cin.get读入一行,但是将存储换行符
注意
其中利用cin.get(两个参数)将不能连续输入两个字符串,因为第二个字符串输入的时候认为看见了换行
这种情况下中间使用用cin.get()进行处理
或者写成cin.get(name,len).get()读入
P73有介绍
也可以使用cin.getline( name1,length).getline(name2,len)连续两行字符串分别读入到数组,因为cin本来就是返回一个类对象。
这里getline让程序更加简单一些,但是他不保存换行符因此不知道数组结束是因为换行符或者是数组已经存满,get函数则更加小心
如果输入了空行:
get()函数读取空行后将设置失效位,后面输入阻断,需要cin.clear()恢复
getline()函数将会赋值一个空字符串
如果输入大于字符串数组长度:
那么剩下的将留在输入队列中,其中getline函数也会设置失效位,阻断之后的输入
如果cin<<year;
cin<<getline(ass,40);
输入cin的时候以换行符结束,后面输入的字符串将没办法获取,因为直接使用cin,最后换行符将存储,后面调用getline的时候首先看到换行符。
解决办法中间加上cin.get()
在介绍一下String类函数
首先在明确这是一个类,创建的字符串是一个类对象String类在申明对象时赋值的长度是0,根据输入字符自动调整
使用前首先添加#include<string 操作:可以用cin输入,cout输出,数组方式访问,+,+=方式连接两个字符串
比如在将两个字符串赋值,进行连接的过程中利用String类的=,+比使用C字符串函数strcpy,和strcat简单
#include<cstring> 提供字符串类对应的一些函数操作:
当然字符串的类型申明为String类或者是申明为字符串数组也可以
strcpy(A,B) 赋值 char a[10],char B[10],strcpy(a,B) 注这个函数可以实现字符串数组的赋值
strcat(A,B)连接
同时有strncat(A,B,LENGTH),strncat(A,B,length)实现将长字符串写入小的