C 的cin 的自定義分隔符
問題:
重定向後使用cin時它到檔案流(透過cin.rdbuf(inF.rdbug())),它會讀取直到到達空白字元。是否可以使用替代分隔符號?
答案:
是的,可以更改cin(或任何其他std::)的字間分隔符號istream) 使用std::ios_base::imbue 和自訂ctype 方面。
處理的自訂方面冒號 (:) 和換行符作為空白字元可用於讀取 /etc/passwd 等文件,其中欄位由冒號分隔。
#include <locale> #include <iostream> struct colon_is_space : std::ctype<char> { colon_is_space() : std::ctype<char>(get_table()) {} static mask const* get_table() { static mask rc[table_size]; rc[':'] = std::ctype_base::space; rc['\n'] = std::ctype_base::space; return &rc[0]; } }; int main() { using std::string; using std::cin; using std::locale; cin.imbue(locale(cin.getloc(), new colon_is_space)); string word; while (cin >> word) { std::cout << word << "\n"; } }
透過將此自訂方面應用於輸入流,cin 現在將將冒號和換行符解釋為單字分隔符,允許分隔 /etc/passwd 等檔案中的欄位。
以上是C 的 `cin` 可以使用自訂分隔符號嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!