C++ 中字符串标准输入的学习及实验
声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入
1、cin>>
cin使用空白(空格、制表符、回车)来确定字符串的结束位置。
cin会将换行符留在输入输出队列中。
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin>>p;
9 cout<<p;
10 cin>>q;
11 cout<<q;
12 return 0;
13 }
实验:上述程序中输入: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,因为最后一个要放' ',delim停止符,如果不设置,则默认为换行符
功能:读取一行字符串到str中,然后将遇到的停止符留在输入队列中。
程序1
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin.get(p,5);
9 cout<<p<<endl;
10 return 0;
11 }
输入abcde 输出abcd 。原因:cin.get(p,5)说明p的最大空间长度是5(包括' '),所以p里面读取到了abcd' '
程序2
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin.get(p,5,'#');
9 cout<<p<<endl;
10 return 0;
11 }
输入ab#c,输出ab 程序3
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin.get(p,5);
9 cout<<p<<endl;
10 cin.get(q,5);
11 cout<<q<<endl;
12 return 0;
13 }
输入abc回车,输出abc,然后直接两个空白行,结束,没给机会输入q,原因是cin.get(p,5)遇到换行符的时候并没有将换行符从输入队列中丢弃,然后cin.get(q,5)的时候,上来就碰到换行符以为输入结束,所以q值为空 解决办法,cin.get(p,5),用cin.get()将换行符从输入队列中读走,如程序4
程序4
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin.get(p,5);
9 cin.get();
10 cout<<p<<endl;
11 cin.get(q,5);
12 cout<<q<<endl;
13 return 0;
14 }
这回p、q都有机会正确的输入输出了
(2)cin.getline()
原型:
cin.getline(char *str,int ArSzie, char delim) cin.getline(char *str,int ArSzie)
参数说明:str读取字符串所放置的位置,ArSize要读取字符串的最大长度,如ArSize为5的时候,则strlen(str)最大只能为4,因为最后一个要放' ',delim停止符,如果不设置,则默认为换行符
功能:读取一行字符串到str中,然后将遇到的停止符从队列里剔除。
前三个函数和cin.get()的结果一样所以就不再写了,下面直接写一个与cin.get()的程序4想对应的程序,进行对比
1 #include<iostream>
2 using namespace std;
3
4 int main()
5 {
6 char p[100];
7 char q[100];
8 cin.getline(p,5);
9 cout<<p<<endl;
10 cin.getline(q,5);
11 cout<<q<<endl;
12 return 0;
13 }
该程序中p、q都能正常输入输出,原因对比cin.getline和cin.get的功能即可
3、getline()
使用时要#include<string>
原型:
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没有限制,其实本质原因还是因为原型不一样
- Python 迭代(iteration)
- Python 切片(Slice)
- Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
- linux学习第二十七篇:使用w查看系统负载,vmstat,top,sar,nload命令
- Python 函数
- Python set(集合) 这一定是最全的介绍集合的博文
- Spark你一定学得会(二)No.8
- Python dict(字典)
- Python 条件判断
- linux学习第二十五篇:cut,sort,wc,uniq,tee,tr,split命令,shell特殊符号
- Python list(列表)
- linux学习第三十篇:iptables filter表小案例,iptables nat表应用
- Python tuple(元组)
- 手把脚教你实现第一个在线预测系统No.21
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Apache环境下配置多个ssl证书搭建多个站点的方法
- 详解Linux手动释放缓存的方法
- 详解Centos7源码编译安装 php7.2之生产篇
- Centos7利用内存优化磁盘缓存读写速度的方法
- Redis过期策略和数据淘汰机制
- 图片由彩色渐变到黑白动画
- Kafka如何保证数据可靠性
- ubuntu中snap包的安装、更新删除与简单使用
- 学习在kernel态下使用NEON对算法进行加速的方法
- Centos7上Mesos和Marathon的安装和配置
- Redis高级数据类型-Bitmap和HyperLogLog
- Redis持久化策略
- 在linux下开启FTP服务方法介绍
- Linux中gpio接口的使用方法示例
- Three.js教程(1):初识three.js