C 學習筆記之string流

2021-10-09 17:44:49 字數 2116 閱讀 8216

在秋招找工作的筆試題中,有很多涉及到自己處理輸入輸出的程式設計題目,舉乙個簡單的例子:

現在需要程式設計錄入乙個**簿,乙個人可能同時有多個**,確保每個人的名字不相同,請程式設計完成**簿的錄入工作.

輸入:morgan 201509321 862550123

drew 97355231

lee 60342787 8323130001 23232111

這裡有乙個什麼問題呢?在輸入的時候沒有指定有多少條記錄,因此用傳統的cin儲存資料就會有問題.這時候getline和stringstream就可以大顯身手了,看下面的**:

#include #include #include using namespace std;

struct personinfo ;

int main()

peoples.emplace_back(info);

} return 0;

}

這裡用到了getline(注意這個getline和cin.getline不同)和istringstream,下面簡單講一下他們的基本用法:

getline的主要作用就是將輸入流is中讀到的字元存入str中,直到遇到終結符delim才結束. getline的函式原型為:

istream& getline ( istream &is , string &str , char delim );

istream& getline ( istream& , string& );

其中is是進行讀入操作的輸入流,常用的就是cin, str是儲存讀入的內容, delim是錄入的終結符,預設是'\n'.

cin.getline需要將字元儲存在char陣列中,且要指定最大長度, 我感覺這個getline比cin.getline好用一些~其使用方式如下:

char buf[256];

cin.getline(buf, 256);

在c++標準庫提供了三大類io型別,他們分別在標頭檔案iostream(定義了用於讀寫流的基本型別), fstream(定義了讀寫命名檔案的型別)和sstream(定義了讀寫記憶體string物件的型別)中. 其中在sstream中主要有如下型別:

型別ifstream和istringstream都繼承自istream,同樣的ofstream和ostringstream都繼承自ostream,因此我們可以像使用istream一樣來使用ifstream和istringstream物件.

因此可以這麼理解:istringstream就是從string讀取資料,就像在istream中從io讀取資料一樣, ostringstream就是向string寫入資料,就像ostream中向io寫入資料一樣, 因此下面的**就是從string中讀取資料,將string中的資料和istringstream繫結,這樣就可以在這個istreingstream上使用輸入運算子來讀取string中的字元:

string line = "abcd 1234";

istringstream record(line);

接下來就可以使用 >> 運算子將record中的資料寫入到string中(可以把這裡的record理解為cin,就是乙個輸入源), 遇到空格會中止.

string str;

record >> str;

cout << str << endl; // 輸出abcd

這裡順便總結一下ostringstream的用法, 主要就是向string中寫入資料. 考慮將最前面的所有**號碼列印出來,除了逐條資訊遍歷列印, 還可以將資料全部寫入到乙個string中:

ostringstream info_list;

for (const auto& entry : peoples)

info_list << "\n";

}cout << info_list.str() << endl;

使用info_list.str()返回ostringstream中所儲存的string的拷貝.

C 學習筆記之I O流

c 提供的i o流類庫含有兩個平行基類 streambuf 和 ios,所有的流類都是由它們派生出來的。ios類包含四個直接派生類 輸入流類istream,輸出流類ostream,檔案流類fstreambase,串流類strstreambase。i o流類庫最主要的標頭檔案iostream,它支援c...

C 學習之對string流的初步認識

sstream標頭檔案中定義了三個型別來支援記憶體io,這些型別可以向string寫入資料和讀入資料,就像string是乙個io流一樣。stringstream特有的操作 sstream strm strm是乙個未繫結的stringstream物件。sstream是標頭檔案sstream中定義的乙個...

C 學習筆記之檔案和流

檔案 普通檔案 二進位制檔案 文字檔案 輸入輸出裝置 鍵盤 顯示器 印表機等 開啟乙個已存在的檔案或建立並開啟乙個新檔案 file fopen const char filename,const char mode filename 路徑及檔名 mode 開啟方式 檔案ex16 1.cpp incl...