c/c++ 字符和字符串讀入小結(gechar cin getline gets) by slj



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)

  

 


免責聲明!

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



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