首先,咱們知道在C++中,空格或者回車被認爲是字符串的分割標誌,使用cin輸入string類的字符串時遇到會自動中止接收輸入c++
例如,當以下程序時:函數
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;
運行結果以下,咱們能夠看到,輸入的字符串實際上只接收到了空格前半部分。spa
這個時候咱們就須要用到getline()這個函數,該函數能夠接受字符到輸入流(帶空格),直到遇到結束標誌符才結束,默認爲‘\n'
code
也能夠是getline(cin,s,'#'),getline(cin,s,'%')blog
這樣就解決單行輸入問題啦!ci
那麼,當我想輸入字符串
I love Chinaget
I love Beijingstring
該怎麼辦呢?it
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 }
完畢!!