首頁 >後端開發 >C++ >如何在 C 中自訂輸入流分隔符號?

如何在 C 中自訂輸入流分隔符號?

Patricia Arquette
Patricia Arquette原創
2024-12-19 07:34:09696瀏覽

How Can I Customize Input Stream Delimiters in C  ?

在C 中自訂輸入流分隔符號

輸入流,例如標準輸入流std::cin,使用空格字元作為分隔字元符預設。但是,如果您需要使用替代字元作為分隔符號怎麼辦?

不幸的是,C 標準函式庫並沒有提供更改 std::cin 分隔符號的直接方法。但是,有一個解決方法,使用 std::ios_base::imbue 函數來新增自訂 ctype 方面。

下面的程式碼示範如何將 std::cin 的分隔符號更改為冒號字符,有效地讀取/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 &amp;rc[0];
  }
};

int main() {
  std::cin.imbue(std::locale(std::cin.getloc(), new colon_is_space));

  std::string word;
  while (std::cin >> word) {
    std::cout << word << "\n";
  }
}

在此程式碼中,colon_is_space 類別被定義為自訂 ctype將冒號 (':') 和換行符號 ('n') 字元標識為空白字元的構面。透過將此方面融入 std::cin,我們有效地將空白字元的識別擴展到包括冒號。

因此,當您使用 std::cin >>運算符,它將讀取由冒號分隔的單字。這使您可以輕鬆解析遵循冒號分隔格式的資料檔案。

以上是如何在 C 中自訂輸入流分隔符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn