天天看點

C++讀取一整行字元串

大家在學習C++程式設計時,一般在輸入方面都是使用的cin.

而cin是使用空白(空格,制表符和換行符)來定字元串的界的。

這就導緻了對于帶有空格的字元串,比如”I Love C++奮鬥樂園論壇”

隻能讀入”I”,後面的都無法讀入。

這時怎麼辦?

 一.對于字元數組:

方法一:getline()

讀入整行資料,它使用Enter鍵輸入的換行符來确定輸入結尾。

調用方法: cin.getline(str, len);

第一個參數str是用來存儲輸入行的數組名稱,第二個參數len是要讀取的字元數。

C++讀取一整行字元串

 1  #include  < iostream >

 2  using   namespace  std;

 3   

 4  int  main()

 5  {

 6       char  str[ 30 ];

 7      cin.getline(str,  30 );

 8      cout  <<  str  <<  endl;

 9       return   0 ;

10  }

C++讀取一整行字元串

方法二:get()

調用方法:cin.get(str, len);

C++讀取一整行字元串

 1  #include  < iostream >

 2  using   namespace  std;

 3   

 4  int  main()

 5  {

 6       char  str[ 30 ];

 7      cin. get (str,  30 );

 8      cout  <<  str  <<  endl;

 9       return   0 ;

10  }

C++讀取一整行字元串

那麼兩者有何差別?

兩者都讀取一行輸入,直至換行符。

然後,getline将丢棄換行符,而get()将換行符保留在輸入序列裡。

是以,再使用cin.get()輸入多行資料時,中間可以使用get()消除換行符。

C++讀取一整行字元串

 1  #include  < iostream >

 2  using   namespace  std;

 3   

 4  int  main()

 5  {

 6       char  str1[ 30 ], str2[ 30 ];

 7      cin. get (str1,  30 );

 8      cin. get ();

 9      cin. get (str2,  30 );

10      cout  <<   " str1:  "   <<  str1  <<  endl;

11      cout  <<   " str2:  "   <<  str2  <<  endl;

12       return   0 ;

13  }

C++讀取一整行字元串

因為get(str, len)和get()都是cin的類成員,是以可以合并起來寫:

C++讀取一整行字元串

 1  #include  < iostream >

 2  using   namespace  std;

 3   

 4  int  main()

 5  {

 6       char  str1[ 30 ], str2[ 30 ];

 7      cin. get (str1,  30 ). get ();    //  注意這裡!

 8      cin. get (str2,  30 );

 9      cout  <<   " str1:  "   <<  str1  <<  endl;

10      cout  <<   " str2:  "   <<  str2  <<  endl;

11       return   0 ;

12  }

C++讀取一整行字元串

二.對于string類

方法一:getline(cin, str)

這說明這裡的getline不是類方法。

C++讀取一整行字元串

 1  #include  < iostream >

 2  #include  < string >

 3  using   namespace  std;

 4   

 5  int  main()

 6  {

 7       string  str;

 8      getline(cin, str);

 9      cout  <<  str  <<  endl;

10       return   0 ;

11  }