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;

 運行結果如下,我們可以看到,輸入的字符串實際上只接收到了空格前半部分。

這個時候我們就需要用到getline()這個函數,該函數可以接受字符到輸入流(帶空格),直到遇到結束標志符才結束,默認為‘\n'

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

 這樣就解決單行輸入問題啦!

那么,當我想輸入

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 }

是這樣嗎?細心地讀者會發現

輸出為什么會少了一行呢?而且出現了一行空行,

這是因為輸入數字之后,敲回車,產生的換行符仍然滯留在輸入流了,

接着就被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 }

完畢!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM