【C++】从标准输入中读取字符串
来源:互联网 发布:淘宝退货赚运费险 编辑:程序博客网 时间:2024/04/30 14:13
1、cin>>
cin使用空白(空格、制表符、回车)来确定字符串的结束位置。
注:cin会将换行符留在输入输出队列中。
测试:
#include<iostream>using namespace std;int main(){ char p[100]; char q[100]; cin>>p; cout<<p; cin>>q; cout<<q; return 0;}
实验:上述程序中输入:good [空格或者tab] job [回车],然后似乎还没等输入第二个字符串q的值,就已经输出了good job
原因:cin>>把good作为第一个字符串赋值给p,然后job被留在了输入队列中,当执行到cin>>q的时候,发现队列里已经有job了,就直接将job赋值给q,然后执行cout<< q。
2、面向行的输入cin.get()、cin.getline()
这两个函数都是cin的成员函数,功能都是读取一行,遇到换行符(回车)认为是字符串的结尾,不同的是getline()将换行符从输入队列中丢弃,而get()会将换行符保留到队列中。
(1)cin.get()
原型:
cin.get(char *str,int ArSzie, char delim)cin.get(char *str,int ArSzie)cin.get(void)cin.get(char)
读字符串的时候用的是前两个原型,而第三个原型可以读取任何字符(包括换行符)
参数说明:str读取字符串所放置的位置,ArSize要读取字符串的最大长度,如ArSize为5的时候,则strlen(str)最大只能为4,因为最后一个要放’\0’,delim停止符,如果不设置,则默认为换行符
功能:读取一行字符串到str中,然后将遇到的停止符留在输入队列中。
程序1、
#include<iostream>using namespace std;int main(){ char p[100]; char q[100]; cin.get(p,5); cout<<p<<endl; return 0;}
测试1:
输入abcde 输出abcd 。原因:cin.get(p,5)说明p的最大空间长度是5(包括’\0’),所以p里面读取到了abcd’\0’
#include<iostream>using namespace std;int main(){ char p[100]; char q[100]; cin.get(p,5,'#'); cout<<p<<endl; return 0;}
测试2:
输入ab#c,输出ab
程序3、
#include<iostream>using namespace std;int main(){ char p[100]; char q[100]; cin.get(p,5); cout<<p<<endl; cin.get(q,5); cout<<q<<endl; return 0;}
测试3
输入abc回车,输出abc,然后直接两个空白行,结束,没给机会输入q,原因是cin.get(p,5)遇到换行符的时候并没有将换行符从输入队列中丢弃,然后cin.get(q,5)的时候,上来就碰到换行符以为输入结束,所以q值为空
解决办法,cin.get(p,5),用cin.get()将换行符从输入队列中读
(2)cin.getline()
原型:
cin.getline(char *str,int ArSzie, char delim)cin.getline(char *str,int ArSzie)
参数说明:str读取字符串所放置的位置,ArSize要读取字符串的最大长度,如ArSize为5的时候,则strlen(str)最大只能为4,因为最后一个要放’\0’,delim停止符,如果不设置,则默认为换行符
功能:读取一行字符串到str中,然后将遇到的停止符从队列里剔除。
前三个函数和cin.get()的结果一样所以就不再写了,下面直接写一个与cin.get()的程序3解决方法添加cin.get()想对应的程序,进行对比
#include<iostream>using namespace std;int main(){ char p[100]; char q[100]; cin.getline(p,5); cout<<p<<endl; cin.getline(q,5); cout<<q<<endl; return 0;}
该程序中p、q都能正常输入输出,原因对比cin.getline和cin.get的功能即可。
3、getline()
使用时要#include
原型:
istream& getline ( istream &is , string &str , char delim );istream& getline ( istream& , string& );
参数:
is 进行读入操作的输入流
str 存储读入的内容
delim 终结符
返回值:
参数is是一样的
功能:
将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 ‘\n’(换行符)。函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入
getline()和cin.getline()区别:
(1)cin.getline()属于istream流,而getline()属于string流,所以使用getline()的时候要包含头文件string
(2)原型不一样,特别注意字符串的参数类型cin.getline()中字符串是char ,它可以将字符串读入到char 型的字符串,也可以将字符串读入到string类型的字符串中,getline()原型中的字符串时string类型,所以只能读入到string类型的字符串中,不可以读入到char *类型中
(3)输入的时候cin.getline限定了输入的最大字节数,而getline没有限制,其实本质原因还是因为原型不一样
- 【C++】从标准输入中读取字符串
- C 从标准输入读取字符串.
- C++从标准输入读取一行字符串
- 从标准输入流中读取数据
- 从标准输入读取
- C语言中从标准输入读取几行输入,并打印到标准输出上两种方法
- 从标准输入行读取输入行并在标准输出中打印这些输入行
- 如何从输入流中读取数据到字符串中
- c语言:从标准输入读取几行输入,输入打印到标准输出上,加上行号
- C和指针 第一章 从标准输入读取几行输入
- C++从txt文本中输入和读取字符串
- std::getline从输入流中读取多行字符串
- 【c语言】从标准输入读取c源代码,并验证所有花括号都成对出现
- C语言:从文本文件中读取输入数据
- C 从标准输入读取源代码并在每一行前加上行标
- 从标准输入流中读取数据,并存储到文件中
- C/C++读取标准输入行
- Linux Shell学习:使用read从标准输入中读取一行
- Maven插件之mybatis-generator自动生成DAO层代码的插件
- Java程序与数据库连接
- React动画API之ReactTransitionGroup用法
- 深度信念网络
- HashSet
- 【C++】从标准输入中读取字符串
- Yii2实例化Model[两种方法]
- POJ-1845 数论
- Java Volatile关键字
- 我在杭州找实习的那些天
- Java 选择排序
- 如何matlab 读取同一个文件中的多个txt 文档
- struts2框架通过拦截器对表单重复提交处理
- STL算法汇总