C++中的字符串輸入輸出


轉自:https://www.cnblogs.com/zzw1024/p/10502011.html

常見的輸入問題:
1、直接用cin輸入(當然可以使用cout直接輸出):
  1)string s;
    cin >> s; //只接收回車鍵和空格前面所輸入的字符!!!!!
    一旦輸入空格,cin將空格視為回車鍵,將會將后面的字符賦予后續有輸入cin函數的變量中,如下面的a,故一定確保輸入無空格!!
  2)char a[10];
    cin >> a; //同樣,只接收回車鍵和空格前面所輸入的字符!!!!!
    一旦輸入空格,cin將空格視為回車鍵,將會將后面的字符賦予后續有輸入cin函數的變量中,如下面的a,故一定確保輸入無空格!!
    同樣:(以下情況是一樣的)
      char *b =a;
      cin >> b;

2、使用空格為間隔輸入多個數字或字符(與scanf功能一樣)
  1)int a,b,c;
    cin >>a>>b>>c; //可以直接輸入a,b,c的值,中間用空格[n個也行]或者回車鍵間隔都可以!!!
  2)
    char a, b;
    cin>>a>>b; //可以直接輸入a,b的值,中間用空格[n個也行]或者回車鍵間隔都可以!!!但無法將空格字符賦予a,b

輸入函數
  string str/line;

1)cin
  cin >> line
    //遇到回車鍵停止輸入,按空格輸出,
  空格、回車等會被丟棄(這些還在緩沖區中,下次若用cin會自動丟棄),下次又會讀取流中剩下的內容。(對於要輸入一個字符串如果用cin>>input;這樣的方法來輸入一個字符串,則遇到空白換行,制表之類的,輸入都會停止)因為從流中讀入數據保存到string中,string會遇到空格就停止錄入。這樣當我們輸入一行帶空格的字符串,就要考慮getline函數,從流中讀入一行字符串.


2)getline
  string line;
  getline(cin,line);//按回車鍵結束輸入
  getline(cin,line,'#');
    //輸入一串字符(不管多少個回車鍵),只要是在‘#’號之 前的字符都會讀取並保存

  get與getline區別不是很大,但一個明顯的區別是get遇到'\n '字符后便返回,這時 '\n '還在緩沖區中,所以下次讀出來的將是 '\n ',而getline遇到'\n '也返回,但它會把 '\n '從緩沖區里移除掉,所以很多時候用getline方便些。

3)cin.get()
  用法1: cin.get(字符變量名)可以用來接收字符
    char ch;
    ch = cin.get(); //只接受一個字符


  用法2:cin.get(字符數組名,接收字符數目)用來接收一行字符串,可以接收空格
    char a[20];
    cin.get(a,20);


  注意:
    cin.get()會將回車鍵存儲在緩存中,若后面還有cin.get()函數,則該函數會將緩存中的回車鍵取出並賦予后面的輸入變量中,故,使用了cin.get()函數就一定后面要加getchar(),將回車鍵讀取並丟棄!!!!!!!!!

4)cin.getline()
  //接受一個字符串可以接受空格並輸出
  char m[20];
  cin.getline(m,5);
  輸入:jkjkjkjkkjkjkjkj
  輸出:jklj //第5個字符默認添加'\0'

5)gets()【c++11已棄用!!!】
  //接受一個字符,可以接受空格並輸出,需包含頭文件#include<string>
  char ch;
  gets(ch);

3)getchar()
  getchar()是stdio.h中的庫函數,它的作用是從stdin流中讀入一個字符,也就是說,如果stdin有數據的話不用輸入它就可以直接讀取了,第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字符,以后的getchar()再執行時就會直接從緩沖區中讀取了。
故一般用getchar()來清除緩存中的字符;

4)輸入強行退出
Ctrl + Z 或輸入EOF再按回車鍵

讀入輸出掛

讀入輸出掛就是逐個字符地讀入數據,從而讓讀入更加快速。輸出掛的原理也是一樣的,都是通過將輸出數字變成輸出字符以加快速度。當然輸入輸出外掛一般用在大量輸入輸出的情況下,這樣性價比才高一些,否則得不償失。

void Rd(int &res){

    res=0;char p;

    while(p=getchar(),p<'0');

    do{

       res=(res<<1)+(res<<3)+(p^48);

    }while(p=getchar(),p>='0');

}

 

void Rd(int &res){

    res=0;char p;int k=1;

    while(p=getchar(),!(p>='0'&&p<='9')&&p!='-');

    if(p=='-')k=-1,p=getchar();

    do{

       res=(res<<1)+(res<<3)+(p^48);

    }while(p=getchar(),(p>='0'&&p<='9'));

    res*=k;

}

 

void Pt(int x){

    if(x==0)return;

    Pt(x/10);

    putchar(x%10^48);

}

 

void Ps(int x){

    if(x<0)putchar('-'),x=-x;

    if(x==0)putchar('0');

    else Pt(x);

}

 


免責聲明!

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



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