4.2 字符串

4.2.1 定义

字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种:C-风格字符串,基于string库的方法。

4.2.2 C风格字符串

  • C风格字符串有一种特殊的性质:以空字符结尾(\0)

eg:char dog[4]={'d','o','g','s'};

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

以上都是字符数组,但只有第二个是字符串;第一组在cout中打印了四个字符后,如若后续内存中没出现空字符,则继续打印;

  • 更简化的初始化字符数组:char cat[8]="cats",char cat[]="cats";

若字符数组元素不足则自动补空字符;

  • 在确定储存字符串所需的最短数组是,记得将字符串结尾的空字符算进去;
  • 字符串常量(双引号)和字符常量(单引号)不能互换;事实上,字符常量(如‘S’)是字符串编码的简写表示。在ASCII系统上,'S'只是83的另外一种写法,但"S"不是字符常量,它代表字符'S''\0'组成的字符串。实际上,"S"实际表示的是字符串所在的内存地址

4.2.3拼接,输入字符串常量

当字符串很长,不能放在同一行。C++允许拼接字符串字面值,即将两个括号引起的字符串拼接成一个。或者说,任何两个由空白(空格,制表符,换行符)分割的字符串常量都可自动拼接。

eg: cout<<"I Love You"  “forever!”;

 cout<<"I Lov"

             "e You forever!";

注:拼接时不会在被连接的字符串之间添加空格;

strlen()——计算字符串的长度;sizeof()——计算该变量所占的内存空间(字符串占的内存空间);

      每次读取一行字符的输入:

  1. 面向行的输入:getline()——以换行符为结束,不保存换行符
  • getline()函数读取整行,通过回车键的换行符来确定输入结尾;
  • 使用cin.getline()调用;
  • 该函数有两个参数,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数;如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储空字符

eg:char name[20];

 cin.getline(name,20);

  • getline()函数在读取指定数目的字符或遇到换行符时停止读取;
  1. 面向行的输入:get()——以换行符为结束,保存换行符

get()有许多种变体,其中一种变体工作方式与getline()类似,接受参数相同;

eg:  cin.get(name,20);

由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符,因此get()函数将认为以及到达行尾,将结束第二次调用;而get()的另一种变体,不带任何参数的get()调用可读取下一个字符,故可用来处理换行符;

eg:cin.get(name,20);

   cin.get();

   cin.get(dessert,20);

另一种使用get()的方式是将两个类成员函数拼接起来(合并)

eg:cin.get(name,20).get();

同样,cin.getline(name,20).getline(dessert,20);其效果与两次调用cin.getline()相同;

3.getline()和get()的比较

  • getline()——以换行符为结束,不保存换行符        get()——以换行符为结束,保存换行符
  • get()使输入更仔细
  • get()读取空行时,将会设置失效位(failbit),即接下来的输入会被阻断;
  • 当输入字符串比分配空间长时,多的字符将会被留在输入队列中(输入流),而getline()还会设置失效位,并关闭后面的输入;

4.2.4 混合输入字符串和数字

#include "iostream"

int main()

{

using namespace std;

cout<<"please tell me your birthyear\n ";

int year;

(cin>>year).get();

cout<<"Please tell me your name\n";

cout<<"my name is :";

char name[10];

cin.get(name,10).get();

cout<<"your birthyear is "<<year<<"and";

cout<<"your name is "<<name;

 

 return 0;  

}

cin>>year在输入结束后会保留换行符在输入队列中,不捕获换行符则后面的输入调用会认为是空行,并把空字符串赋给name数组;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值