C++ getline 和 cin.getline的个人总结

本文总结了C++中getline和cin.getline函数的使用,包括它们的参数意义、适用场景以及读取带有空格字符串的区别。getline适用于赋值给string对象,以换行符为默认结束标志;而cin.getline除限制字符数外,还可接收char数组,读取到指定长度或遇到结束标志为止。

C/C++语言中,如果我们想读入一个带有空格的字符串,我们可以选择gets(str)。但是这种做法有两个局限性:

  • str必须为char类型的数组,不能用string str
  • 不能使用-std=c++11编译,因为在c11标准中,已经把gets()函数移除了。

那么,什么是c11标准所推荐的读入带有空格字符串的方式呢?

getline(从哪里读入,赋值到哪里去,以什么标志结束读入)

string str
getline(cin,str,'\n')//比如cin::ab c,赋值完后str="ab c"

上面代码的意思就是从cin读入,赋值到str,以换行符作为结束标志,第三个参数可以不用写,因为第三个参数默认是回车。
getline第二个参数不可以为char数组,也就是是说,getline只可以赋值给string类。
我们知道,cin机制是先赋值到缓冲区,然后getline从缓冲区拿去一部分,赋值给str,那么作为结束符的‘\n’现在有三种状态:

  • 没被拿出来,一直从缓冲区呆着。
  • 被拿出来了,但是没有被使用,而是被丢弃了。
  • 被拿出来了,而且被使用了,赋值到str,成为str的一部分。

实验代码:

//Input:abczabc
string str1,str2;
getline(cin,str1,'z');
getline(cin,str2);
cout<<"str1 = "<<str1<<endl;
cout<<"str2 = "<<str2<<endl;
//Output:
str1 = abc 
str2 = abc

实验证明,上述猜想2是正确的。

cin.getline(赋值到哪里去,字符串的上限,以什么标志结束读入)

我们发现,这两个函数其实都差不多,只是这个函数多了个字符串的上限,这是什么东东?
我们看个栗子:

Input:abczabc
string str;
cin.getline(str,3,'z')
cout<<"str = "<<str<<endl;
Output:str = ab

我们发现,str只能接受小于字符串的上限的字符个数,本题为3,那么str最多只能接受2个字符,无论到没到结束标志。
cin.getline的第一个参数可以接收char数组类型。
暂时就想到这么多,其实这两个函数都差不多,用的时候知道它们各自的特点就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值