首先,我们知道在C++中,空格或者回车被认为是字符串的分割标志,使用cin输入string类的字符串时遇到会自动停止接收输入

例如,当如下程序时:

 #include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s; for(int j = s.size()- ; j>= ; j--){
cout<<s.at(j);
}
return ;

运行结果如下,我们可以看到,输入的字符串实际上只接收到了空格前半部分。

这个时候我们就需要用到getline()这个函数,该函数可以接受字符到输入流(带空格),直到遇到结束标志符才结束,默认为‘\n'

也可以是getline(cin,s,'#'),getline(cin,s,'%')

这样就解决单行输入问题啦!

那么,当我想输入

I love China

I love Beijing

该怎么办呢?

 #include<bits/stdc++.h>
using namespace std;
int main(){
int n ;
cin>>n;
string a[n];
for(int i = ; i < n; i++){
getline(cin,a[i]);
} for(int i = ; i< n ; i++){
for(int j = a[i].size()- ; j>= ; j--){
cout<<a[i].at(j);
}
cout<<endl;
}
}

是这样吗?细心地读者会发现

输出为什么会少了一行呢?而且出现了一行空行,

这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,

接着就被getline(cin,s)给读进去了,

此时的s=“\n”,所以在2的后边会有一个空行

同时for循环中的i也自增1,所以会少读一行

要解决这个问题,就要干掉滞留在输入流中的换行符。

这就用到了cin.ingore()函数

同样,我们也可以用getchar()代替cin.ingore(),效果是一样的

 #include<bits/stdc++.h>
using namespace std;
int main(){
int n ;
cin>>n;
cin.ignore(); //或者是getchar();
string a[n];
for(int i = ; i < n; i++){
getline(cin,a[i]);
} for(int i = ; i< n ; i++){
for(int j = a[i].size()- ; j>= ; j--){
cout<<a[i].at(j);
}
cout<<endl;
}
}

完毕!!

C++如何输入单行和多行带空格的字符串并将字符串倒序输出的更多相关文章

  1. Java基础知识强化08:将字符串倒序输出(包括空格)的几种方法

    1.最容易想到的估计就是利用String类的toCharArray(),再倒序输出数组的方法了: package himi.hebao05; public class TestDemo02 { pub ...

  2. 移动web处理input输入框输入银行卡号四位一空格

    由于项目上有需求要求输入银行卡号四位一空格的需求,改过好几版发现都有bug,最后优化了一版看起来效果还行,发帖留存. 难点是从中间插入和删除处理光标问题. 首先需要用到获取光标和设置光标的方法. // ...

  3. (C++)读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)

    1 /* 2 程序功能:读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔). 3 例如:当输入985这个数字时,显示如下信息: 4 985是一个3位数字! ...

  4. YTU 1055: 输入字符串以及输出

    1055: 输入字符串以及输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 694  解决: 476 题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字 ...

  5. Android 用空格作为分割符切割字符串

    项目中有需要用到空格作为分割符切割字符串,进而转为List. String wordStore = edWord.getText().toString(); String[] word = wordS ...

  6. C语言输入多组问题~ungetc回退字符到stdin

    题目描述 输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m]   输出 YES or NO  查找有则YES 否则NO . 输入描述: 输入有多组数据 ...

  7. Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)

    Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...

  8. Asp.Net转换Html加号显示为空格的字符!(自已备用)

    Asp.Net转换Html显示为空格的字符!(自已备用) 显示+(加号),须要替换一下!

  9. (1) 一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串

    /** * 有一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串 例如: String str ="abc", m=2 得到结果是 "ab" &quo ...

随机推荐

  1. HDU 6417

    题意 英文 做法 \(S_{a,b}\)为\(a\)与\(b\)中素数次幂奇偶性不同的集合,容易得出\[d_{a,b}=\left\{\begin{aligned}1 &&|S_{a, ...

  2. 跳跃【BFS】

    From 牛客网:https://ac.nowcoder.com/acm/problem/25160

  3. 已知float后几位,谋几位保留

    设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式____. #include "common.h" #includ ...

  4. Normalizing flows

    probability VS likelihood: https://zhuanlan.zhihu.com/p/25768606 http://sdsy888.me/%E9%9A%8F%E7%AC%9 ...

  5. H5_0014:background-size设置

    2,background-position

  6. PHP正则表达式及表单注册案例

    正则表达式是一种具有特定模式的用来匹配文本的字符串 preg_match 匹配 $pattern = '/php/'; $subject = "php 是最好的编程语言,php 没有之一!& ...

  7. ubuntu set up 4 - 设置和软件

    1. Top Bar显示日期 https://askubuntu.com/questions/966576/customizing-tray-taskbar-date-display-in-ubunt ...

  8. 如何将.sql文件导入到mysql的数据库中

    首先通过cmd的net start mysql57 启动mysql的服务器 然后,输入命令:mysql -h 127.0.0.1 -u root -p来启动mysql服务 最后 上图画红圈的部分是.s ...

  9. [HNOI2004] 树的计数 - prufer序列

    给定树每个节点的 degree,问满足条件的树的数目. \(n\leq 150, ans \leq 10^{17}\) Solution 注意特判各种坑点 \(\sum d_i - 1 = n-2\) ...

  10. Spring Boot2 快速入门教程-到上手

    Spring Boot2 教程合集 入门 纯 Java 代码搭建 SSM 环境 创建一个 Spring Boot 项目的三种方法 理解 Spring Boot 项目中的 parent 基础配置 配置文 ...