getchar:
逐個字符讀入,可以讀入一切字符,包括空格符和回車符。這個函數很通用,可以代替以下所有函數。注意getchar連回車符都接受,接受回車符意味着可以判斷讀入的字符是不是'\n'。但以下所有函數都不接受空格符和回車符。
用法:char ch; ch=getchar();
cin:
既可以讀字符,又可以讀字符串。不接受空格符和回車符。
如果程序需要逐個讀字符,可以用cin。用法:char ch; cin>>ch;
如果程序需要讀入空格為結束符的字符串,一行輸入多個字符串,字符串之間以空格為間隔。比如一行輸入多個姓名,程序按姓名排序。
用法:char s[20];循環中調用cin>>s ; 或者string s; 循環中調用cin>>s;
getline(cin,str):
以回車符為結束符 ,可以讀入一個以回車符為結束符的string(c++風格字符串)。需要include <string>
用法:string str; getline(cin,str);
gets:
以回車符為結束符 ,所以可以讀入一個以回車符為結束符的c風格字符串
(1) 有時候,我們需要讀入一行,將這一行的字符(可能包含空格)做為一個字符串,那么可以用一下三種方法
getline(cin,str)
gets:
getchar:用循環處理
示范代碼如下:
#include<iostream>
#include<cstdio> #include<string> using namespace std; int main() { /* //讀入一個以回車符為結束符的字符串:方法1:需要#include<string> string a; getline(cin,a); cout<<a; */ /* //讀入一個以回車符為結束符的字符串:方法2:需要#include<iostream> 或 #include<cstdio> char s[20]; gets(s); printf("%s",s);//或者cout<<s; */ /* //讀入一個以回車符為結束符的字符串:方法3:需要#include<iostream> 或 #include<cstdio> char ch,s[20]; int i=0; while((ch=getchar())!='\n') //注意, (ch=getchar())一定要有括號 { s[i++]=ch; //cout<<i; } s[i]='\0'; printf("%s",s);//或者cout<<s; */ return 0; }
(2) 有時候,我們需要逐個讀入字符,可以根據情況靈活選擇用getchar 和 cin,但是要注意它們有很重要的區別
如果程序需要接受回車符,那么用getchar方便書寫代碼。
如果程序不需要接受回車符,那么用cin比較方便。
以下示范代碼說明了cin和getchar在逐個字符讀入時的區別:
#include<iostream>
using namespace std;
int main()
{
/*
//如果統計字符個數,輸入 i am a stu后,按回車,以ctrl+z結束,結果為 7
char ch;
int i=0;
while(cin>>ch) i++;
cout<<i;
*/
/*
//如果統計字符個數,輸入 i am a stu后,以回車符結束,結果為10
char ch;
int i=0;
while((ch=getchar())!='\n') i++;
cout<<i;
*/
//如果統計單詞數目,輸入 i am a stu后,按回車,以ctrl+z結束,結果為 4
char s[20];
int i=0;
while(cin>>s) i++;
cout<<i;
return 0;
}
比如:NOIP2015地雷游戲,每一行中字符之間沒有空格,行尾有回車符。最好用cin,因為如果用getchar(),讀入程序的內循環的條件循環變量<=原有的列數+1,你還需要判斷讀入的是不是回車符或者做其他的處理。
地雷游戲讀入地圖代碼如下:
#include<bits/stdc++.h>
using namespace std;
bool a[105][105];//一張地圖,有雷為一,無雷為零
int main() { memset(a,0,sizeof(a));//地圖最開始清空 int n,m; char tmp; cin>>n>>m; for(int i=1;i<=n;i++)//讀入地圖 { for(int j=1;j<=m;j++) { cin>>tmp;//讀入每一個點 if(tmp=='*') a[i][j]=1;//如果是地雷就將這個點設為一 } } }
(3)有時候,我們需要讀入一行字符,這一行字符中包含以空格為間隔的多個字符串。
比如:輸入一個英文句子,統計單詞的數量。
這種情況,不能用gets,getline,可以用getchar,cin,但從代碼書寫方面來看cin最方便,當然用getchar會使得程序運行更快
用法:循環中調用cin。while(cin>>str) 。如果事先不知道一行中字符或字符串的數量,則輸入完先回車,再以ctrl+z結束。代碼見(2)