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

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

例如,当如下程序时:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5 string s;
 6 cin>>s;
 7 
 8 for(int j = s.size()-1 ; j>=0 ; j--){
 9 cout<<s.at(j);
10 }
11 return 0;

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

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

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

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

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

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

那么,当我想输入

I love China

I love Beijing

该怎么办呢?

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n ;
 5     cin>>n;
 6     string a[n];
 7     for(int i = 0; i < n; i++){
 8         getline(cin,a[i]);
 9     }
10 
11     for(int i = 0 ; i< n ; i++){
12         for(int j = a[i].size()-1 ; j>=0 ; j--){
13             cout<<a[i].at(j);
14         }
15         cout<<endl;
16     }
17 }

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

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

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

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

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

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

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

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

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

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

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n ;
 5     cin>>n;
 6     cin.ignore();    //或者是getchar();
 7     string a[n];
 8     for(int i = 0; i < n; i++){
 9         getline(cin,a[i]);
10     }
11 
12     for(int i = 0 ; i< n ; i++){
13         for(int j = a[i].size()-1 ; j>=0 ; j--){
14             cout<<a[i].at(j);
15         }
16         cout<<endl;
17     }
18 }

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

完毕!!

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

 

原文链接: https://www.cnblogs.com/ariesarticles/p/10567599.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/291863

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午1:59
下一篇 2023年2月15日 下午2:00

相关推荐