在秋招找工作的筆試題中,有很多涉及到自己處理輸入輸出的程式設計題目,舉乙個簡單的例子:
現在需要程式設計錄入乙個**簿,乙個人可能同時有多個**,確保每個人的名字不相同,請程式設計完成**簿的錄入工作.這裡有乙個什麼問題呢?在輸入的時候沒有指定有多少條記錄,因此用傳統的cin儲存資料就會有問題.這時候getline和stringstream就可以大顯身手了,看下面的**:輸入:morgan 201509321 862550123
drew 97355231
lee 60342787 8323130001 23232111
#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...