c/c++,字符,字符串,各种方式读入与对空格,回车的处理
#include<iostream>
#include<string>
using namespace std;
int main()
{char a[50],b[50],charr;//经测试,cin读入字符串,会识别空格和回车为截止,并且不会吞掉,//只是每次读的时候会从第一个不为空格/回车的字符开始读(因为加一个getchar不影响,加两个就影响了) // ceshi: 1.qwe\nasd\n||// 2.qwe asd\n||// 3. qwe asd\n||均正确! //输入: asd\nqwe\n输出:asd**qwe**\n**//输入:\n\n\n\nasd qwe\n输出:asd**qwe** **//总结:缓冲区中,跳过了就是跳过了,getchar不会从头识别你是空格还是回车,因为你是先cin的a,然后getchar 所以比如cin读到东西了以后才能执行后面getchar语句,同时这时候缓冲区指针是cin读到的内容,所以你最开始输入多少个\n或者空格都无所谓的
// cin>>a;charr=getchar();cin>>b;
// cout<<a<<"**"<<b<<"**"<<charr<<"**"<<endl;//经测试,getline读入字符串,读入空格,会识别回车为截止,即不读入\n但是会吞掉(跳过)他(即将\n移出缓冲区,以防下次读入的时候直接\n了)(所以上来就\n,用cin不影响但是getline就影响了) //或理解成会将\n读入字符串,但是优化的时候将其换成\0,反正就是缓冲区和字符串中都没有这个\n // 不带getchar的ceshi: 1.qwe\nasd 2.qwe asd 均正确!//带getchar的ceshi:3.qwe asd\n \n||输出:qwe asd**** **//因为getchar只是读一个字符,不会将\n跳过
// string s1,s2;
// getline(cin,s1);
// charr=getchar();
// getline(cin,s2);
// cout<<s1<<"**"<<s2<<"**"<<charr<<"**"<<endl;//经测试,scanf读入字符串,会识别空格和回车为截止,并且不会吞掉。 // ceshi: 1.qwe\nasd\n||// 2.qwe asd\n||// 3. qwe asd\n||均正确! scanf("%s",a);/*getchar()*/scanf("%s",b);cout<<a<<"**"<<b<<"**"<<endl;return 0 ;
}
下面是对字符的代码
#include<iostream>
using namespace std;
int main()
{char a,b;//经测试,cin读入字符,会识别空格和回车,并且会跳过回车 // ceshi: 1.sd 2.s\nd 3.s d 均正确!
// cin>>a>>b;
// cout<<a<<"**"<<b<<"**"<<endl;//经测试,getchar读入字符,没有识别这一说了,并且不会跳过回车和空格// ceshi: 1.sd 2.s\nd 3.s d 只有1正确!
// a=getchar();
// b=getchar();
// cout<<a<<"**"<<b<<"**"<<endl;//经测试,getchar与 scanf结果完全相同 scanf("%c",&a);scanf("%c",&b);cout<<a<<"**"<<b<<"**"<<endl;return 0 ;}
scanf和cin读字符串的时候回跳过缓冲区首的所有空格回车 但是gets getline会都读进去,
测试代码:
#include<iostream>
#include<cstdio>
#include<string>using namespace std;
int main()
{char a[100];string s;int n;cin>>n;gets(a);//换成scanf试试//scanf("%s",a); cout<<"****";cout<<a;cout<<"****"<<endl;// getline(cin,s);和gets是一模一样的,,不需要试了
// cout<<"****";
// cout<<s;
// cout<<"****"<<endl;return 0 ;
}
输入:
5\n||gets和scanf的结果就不一样了
5\n|| 结果与上一行对应的结果相同
总结:
scanf("%s",a);//cin>>a; 会从第一个不为空格、回车的地方开始,并且遇到空格回车就结束 ,并且将空格回车留在缓冲区中(所以后面如果用gets 则需要先跟一个getchar)
gets 从缓冲区第一个字符开始读(有啥读啥),一直读到第一个回车,并且把这个回车清除出缓冲区,(或理解成读成自己的字符串,再将其改成'\0'),所以gets好人性化啊!!不会给后面的读入留下什么后遗症。
综上所述 gets读的话,你上来就敲回车,就会结束程序了,但是如果scanf读的话,一直敲回车跟没敲一样,他还在等着你读第一个字符。
关于gets,cin.getline,getline
相比gets和cin.getline(str,10005);之下,getline(cin,str)就不这么友好,他和gets,cin.getline一样怕之前残留的 '\n' 但是不友好的地方在于(也就是唯一的区别在于)并不会帮忙把后面的'\n'吞掉,所以getline之后最好加一个getchar,而gets和cin.getline则不需要。
c/c++,字符,字符串,各种方式读入与对空格,回车的处理相关推荐
- 字符字符串的输入输出
字符字符串的输入输出 作用 scanf("%c",&a);;getchar();;读入文章 gets();;getline();;读入一行 cin不能读入空格 scanf ...
- python使用字典格式化字符串-Python字符串格式方式 %s format()
python中格式化字符串的方式有两种,一种是使用"%s"的方式,一种是str.format()的方式,接下来就对这两种方式做个介绍 1.%s的方式 两种用法,第一种是在字符串中使 ...
- 【Elasticsearch】十九种Elasticsearch字符串搜索方式
1.概述 十九种Elasticsearch字符串搜索方式 刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出 ...
- 【Elasticsearch】十九种Elasticsearch字符串搜索方式终极介绍 各种 查询
本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...
- Go字符串拼接方式深入比较
前言 Go中字符串的拼接主要有"+".fmt.Sprintf+%s.strings.Join等方式,已经有很多人从耗时的角度比较这些方式的性能,本文则从源码的角度去分析下这些方式的 ...
- golang字符串拼接方式
字符串拼接是字符的常见操作.在golang中,遇见了字符串拼接.作为一个长期的C程序员,我第一反应是:字符串拼接函数strcat,但发现golang并无字符串拼接函数. 我想起了最简单的方法,通过+操 ...
- java按空格分字符串,两种用空格分隔的java字符串的方式
两种用空格分隔的java字符串的方式 两种方式: 1. String str = "123 456 789 111"; String [] strArray = str.split ...
- C语言文件——字符串的方式读出与写入
C语言文件--字符串的方式读出与写入 conclusion: the steps of wirte into file process 1.定义文件路径和文件操作 2.定义文件指针以及存储变量 3.打 ...
- ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字符的个数, 在主函数中输入字符串以及输出上述结果. 只要结果,别输出什么提示信息. 输入 一行字符串 输出 统计数据, ...
最新文章
- 史上最全异常检测算法概述
- Redis的各项功能解决了哪些问题?
- pdfparser java_如何使用java从PDF中提取内容?
- ORA-16038: log 3 sequence# 103 cannot be archived
- Ubuntu学习——第一篇
- Language-Directed Hardware Design for Network Performance Monitoring——Marple
- c++ set 遍历_47. Set 是如何工作的(3) 遍历顺序是如何确定的?
- float32精度_PyTorch 1.6来了:新增自动混合精度训练、Windows版开发维护权移交微软...
- seaborn画图设置横纵坐标标签
- 华为Mate 40系列或首发屏下摄像头:全球首个量产级别方案
- 基于 Redis3.2.4 集群搭建说明
- FreeRTOS(五)——heap文件解析
- c语言数组与指针编程源码,C语言编程(练习9:数组与指针)
- YUI-compressor 在Linux下安装和使用
- python一二维数据的格式化和处理_python第七周,二维数据的格式化和处理
- 南京市建筑物矢量数据(Shp格式+带高度)
- Microsoft visual Studio 2010 下 DirectX SDK 安装配置详细过程
- 小米盒子升级android tv后不能安装第三方软件下载,小米电视,小米盒子无法安装第三方应用,怎么办?...
- 电气领域相关数据集(目标检测,分类图像数据及负荷预测),输电线路图像数据
- MySQL子查询的优缺点_为什么MySQL不推荐使用子查询和join
热门文章
- 深度学习03——CNN
- Depth-first Search深度优先搜索专题2
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第28篇]什么是公钥密码学的IND-CCA安全定义?
- [Leedcode][JAVA][第983题][最低票价][动态规划]
- 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
- mysql gui 分区_一文彻底搞懂MySQL分区
- UE4异步编程专题 - 线程池FQueuedThreadPool
- Asterisk标准通道变量
- PCI总线体系结构概述
- 怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤