C++ 中字符串标准输入的学习及实验
声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入
1、cin>>
cin使用空白(空格、制表符、回车)来确定字符串的结束位置。
cin会将换行符留在输入输出队列中。
#include<iostream>
using namespace std; int main()
{
char p[];
char q[];
cin>>p;
cout<<p;
cin>>q;
cout<<q;
return ;
}
实验:上述程序中输入: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[];
char q[];
cin.get(p,);
cout<<p<<endl;
return ;
}
输入abcde 输出abcd 。原因:cin.get(p,5)说明p的最大空间长度是5(包括'\0'),所以p里面读取到了abcd'\0'
程序2
#include<iostream>
using namespace std; int main()
{
char p[];
char q[];
cin.get(p,,'#');
cout<<p<<endl;
return ;
}
输入ab#c,输出ab
程序3
#include<iostream>
using namespace std; int main()
{
char p[];
char q[];
cin.get(p,);
cout<<p<<endl;
cin.get(q,);
cout<<q<<endl;
return ;
}
输入abc回车,输出abc,然后直接两个空白行,结束,没给机会输入q,原因是cin.get(p,5)遇到换行符的时候并没有将换行符从输入队列中丢弃,然后cin.get(q,5)的时候,上来就碰到换行符以为输入结束,所以q值为空
解决办法,cin.get(p,5),用cin.get()将换行符从输入队列中读走,如程序4
程序4
#include<iostream>
using namespace std; int main()
{
char p[];
char q[];
cin.get(p,);
cin.get();
cout<<p<<endl;
cin.get(q,);
cout<<q<<endl;
return ;
}
这回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,因为最后一个要放'\0',delim停止符,如果不设置,则默认为换行符
功能:读取一行字符串到str中,然后将遇到的停止符从队列里剔除。
前三个函数和cin.get()的结果一样所以就不再写了,下面直接写一个与cin.get()的程序4想对应的程序,进行对比
#include<iostream>
using namespace std; int main()
{
char p[];
char q[];
cin.getline(p,);
cout<<p<<endl;
cin.getline(q,);
cout<<q<<endl;
return ;
}
该程序中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没有限制,其实本质原因还是因为原型不一样
C++ 中字符串标准输入的学习及实验的更多相关文章
- 连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)
编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体 ...
- Python中字符串的学习
Python中字符串的学习 一.字符串的格式化输出 % 占位符 %s 字符串 %d integer %x 十六进制 integer %f float 指定长度 %5d 右对齐,不足左边补空格 %-5d ...
- JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue
前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...
- Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。
Python3 与 C# 面向对象之-继承与多态 文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...
- 第五周学习总结&实验报告(三)
第五周学习总结&实验报告(三) 这一周又学习了新的知识点--继承. 一.继承的基本概念是: *定义一个类,在接下来所定义的类里面如果定义的属性与第一个类里面所拥有的属性一样,那么我们在此就不需 ...
- 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):生物信息学中的图表示学习:趋势、方法和应用
4.(2021.6.24)Briefings-生物信息学中的图表示学习:趋势.方法和应用 论文标题: Graph representation learning in bioinformatics: ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...
- JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序
前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...
随机推荐
- 指向const的指针和const指针
1.指向const的指针:const int *p 或 int const *p 解释:p是一个指针,指向const int类型的常量:指针指向的内容为常量,因此不能改变*p的值,但指针p可以改变,指 ...
- 51nod 计算N!的位数
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1130 对于这类问题:斯特林近似公式: 百度百科的证明:http: ...
- 查看Linux磁盘空间大小
一.df 命令: df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置: 举例: [root@localhost beinan ...
- Useful related java API for Android
Language_suport and Other Language-Oriented API: strings,exceptions, threads, #java.lang.* offers th ...
- sv_target_output dx11
http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx
- uva 991
卡特兰数 最后不输出空行... #include <cstdio> #include <cstdlib> #include <cmath> #include &l ...
- Unity3D 问题流水总结
一.error CS1612:Cannot modify a value type return value of `UnityEngine.SliderJoint2D.limits'. Consid ...
- MVC中SelectList和@Html.DropDownList("MainDuty_UserId","请选择")的运用
Models.Project model = projectdb.dbSet.SingleOrDefault(e => e.Project_ID == id); ViewB ...
- WPF中log4net的用法
WPF中如何使用log4nethttp://www.cnblogs.com/C-Sharp2/archive/2013/04/12/WPF-LOG4NET.html Apache log4net Ma ...
- DJANGO的requirements的运用
这里记录一下我现在项目的requirements.pip文件,安装命令为: pip install -r requirements.pip 这样一来,所有依赖,全部搞定. Django== djang ...