首先,我们知道在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. PWA - Manifest

    manifest 在一个JSON文本文件中提供有关应用程序的信息(如名称,作者,图标和描述) manifest 的目的是将Web应用程序安装到设备的主屏幕 部署一个 manifest <link ...

  2. A Simple Problem with Integers POJ - 3468 线段树区间修改+区间查询

    //add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #includ ...

  3. Edit页面返回ViewBag json字符串与前端js交互

    很多时候,在打开一个新页面的时候,后端需要同时传一个json字符串给前端页面,但是我们又不能把action的返回值改为string,这时候我们就需要用到ViewBag将json字符串传回到前端,前端j ...

  4. JavaScript 删除某个数组中指定的对象和删除对象属性

    Javascript: 删除指定对象:使用过程中只适合删除对象,如果数组中添加的是类型Function的话是删除不了的. function removeObjWithArr(_arr,_obj) { ...

  5. Android中的内存管理机制以及正确的使用方式

    概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操 ...

  6. H5_0009:关于HTML5中Canvas的宽、高设置问题

    关于HTML5中Canvas的宽.高设置问题 Canvas元素默认宽 300px, 高 150px, 设置其宽高可以使用如下方法(不会被拉伸): 方法一:        <canvas widt ...

  7. LVM实现将2块磁盘总空间“合二为一”并挂载到同一目录

    需求场景 将MySQL主机的2块18T的数据盘空间全部"合并"后挂载到/mysql_data目录下,要求文件系统格式化为xfs:已有关键信息梳理如下: 需要挂载的数据盘 /dev/ ...

  8. jQuery---突出展示案例

    突出展示案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  9. LaTeX技巧011:LaTtex中如何产生直立体希腊字母?

     %\usepackage{upgreek}\upmu \uppi

  10. 安卓开发中遇到java.net.SocketException: Permission denied

    仅需在AndroidManifest.xml添加 <uses-permission android:name="android.permission.INTERNET" /& ...