C++学习第六天----字符串,按个读取和按行读取

1.字符串

        c++处理字符串的方式有两种:第一,来自c语言的c-风格字符串;第二,基于string类库的方法;

如何存储字符串?有没有想到char类型的数组;

        c-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写作\0,其ASCII码为0,用来标记字符串的结尾;

char dog[8] = {'b' , 'e' , 'a' , 'u' , 'x' };

char cat[8] = {'a' , 'c' , 'a' , 't' , '\0'};

上述第一个就不是一个字符换,只能被称为字符数组;第二个就是字符串;

说明一下,如果把上面两个字符数组打印出来,第一个打印完8个字符之后,还会继续打印,后面打印的东西是未知的,直到遇见\0结束;但也不用担心,内存中空字符很常见;

上面示例将数组初始化为字符串的工作看上去是不是很麻烦?另外一种方法,用双引号括起来一串字符,这种字符串被称为字符串常量或字符串字面值;末尾不用加空字符,隐式包含了;

char fish[] = "bubbles"; 

存储字符串所需长度时,别忘了还有一个空字符也要计算在内;

双引号括起来的叫字符串常量;单引号括起来的是字符常量;“S”实际上表示的是字符串所在的内存地址;

2.拼接字符串常量

        任何两个由空白(空格,制表符,换行符)分隔的字符串常量都将自动拼接成一个;

stelen()计算可见字符串的长度,不包括空字符和最后的结束符;

sizeof()计算操作数的存储大小,单位byte字节;

3.字符串输入

cin使用空白(空格,制表符,换行符)来确定字符串的结束位置;

下面举个简单例子,假如你输入了alis dreeb,注意中间有个空格,那么第一次读取只会读到alis就会结束,第二次就会读dreeb;键盘输入的内容保存在输入缓冲区,读了之后才会被丢弃;所以上面那种输入,会出现一种bug,第一次读取内容不完整,且第二次cin不会被执行,直接就从缓冲区把dreeb读走了;

4.每次读取一行字符串输入

        知道了上面出现的弊端,这里就给出了一种解决方法;istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get();这两个函数都读取一行输入,直到到换行符;然后getline()将丢弃换行符,get()将换行符保留在输入序列中;

调用方式:cin.getline();

get();

cin.get(name,arsize);
cin.get(dessert,arsize);

第一次调用,换行符保留在输入队列,第二次调用看到的第一个字符就是换行符,直接结束;

这就和3.中说的现象有点像;幸运的是,get()由一种变体,不带参数的cin.get()调用可读取下一个字符,就可以用它来处理换行符;

cin.get(name,arsize);
cin.get();
cin.get(dessert,arsize);

get()将两个类成员函数拼接起来;cin.get(name,araize).get();

getlin()也可以拼接;

C++允许函数有多个版本,条件是这些版本的参数列表不同;

        比如看到cin.get()就知道是要读取一个字符;

getline()使用简单,get()使得检查错误更简单;

你可能感兴趣的:(c++,学习,开发语言)