[情報] 輸出/輸入格式處理器的設計

看板C_and_CPP (C/C++)作者 (圈叉)時間17年前 (2007/10/13 08:05), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
以下是由中大織夢板轉來的 ******************************************************************** C++ 的輸出/輸入與其他語言不太一樣,它是透過 << 與 >> 兩個運算子來 協助輸出與輸入的動作,如果用慣了 C 的 print ,可能會不太習慣, 但若使用者自行設計一些格式處理器,則 C++ 的輸出/輸入就變得非常靈活。 以下是利用自行設計的 Split 輸出格式處理器,使得之後物件的輸出能自動 以指定的格數分開列印,同時此輸出格式處理器也可自行指定分隔的字元。 ***使用方式*** string a = "hello" ; int b = 1992 ; char *c = "math" ; double d = 3.14159 ; cout << split(2,'*') << a << endl ; cout << split(3,'=') << b << endl ; cout << split(3,'-') << c << endl ; cout << split(2) << d << endl ; ***輸出*** h**e**l**l**o 1===9===9===2 m---a---t---h 3 . 1 4 1 5 9 以上的 split 為輸出格式處理器。 程式碼為: #include <iostream> #include <sstream> #include <string> using namespace std ; class Split { private : int n ; char sep ; ostream *ptr ; public : Split operator() ( int s , char separator = ' ' ) { n = s ; sep = separator ; return *this ; } friend Split operator<< ( ostream& out , Split foo ) { foo.ptr = &out ; return foo ; } template <class T> friend ostream& operator<< ( Split split , const T& foo ) { ostringstream ostr ; ostr << foo ; string str = ostr.str() ; for ( int i = 0 ; i < str.size()-1 ; ++i ) *(split.ptr) << str[i] << string(split.n,split.sep) ; *(split.ptr) << str[str.size()-1] ; return *(split.ptr) ; } }; Split split ; int main() { string a = "hello" ; int b = 1992 ; char *c = "math" ; double d = 3.14159 ; cout << split(2,'*') << a << endl ; cout << split(3,'=') << b << endl ; cout << split(3,'-') << c << endl ; cout << split(2) << d << endl ; return 0 ; } 有關格式處理器的設計方法可參考『深度學習C++』網頁內資料下載區的 補充教材。 *************************************************************** -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.25.64
文章代碼(AID): #1740kwwo (C_and_CPP)
文章代碼(AID): #1740kwwo (C_and_CPP)