>백엔드 개발 >C++ >C에서 입력 스트림의 구분 기호를 어떻게 사용자 정의할 수 있습니까?

C에서 입력 스트림의 구분 기호를 어떻게 사용자 정의할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 01:47:10282검색

How Can I Customize the Delimiter for Input Streams in C  ?

C에서 입력 스트림 구분 기호 사용자 정의

추출 연산자(cin)를 사용하여 스트림에서 입력을 읽을 때 기본 동작은 다음과 같습니다. 공백 문자가 나타날 때까지 읽습니다. 그러나 특정 시나리오에서는 사용자 정의 구분 기호를 사용해야 할 수도 있습니다.

cin 구분 기호 변경

표준 라이브러리는 cin과 같은 입력 스트림에 대한 단어 구분 기호입니다. 이는 ctype이라는 사용자 정의 문자 유형 패싯을 추가하기 위해 std::ios_base의 imbue 메소드를 사용하여 달성할 수 있습니다.

예: 콜론을 구분 기호로 사용

의 경우 예를 들어 /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() {
  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";
  }
}

이 예에서는 콜론 문자(:)를 처리하는 colon_is_space라는 사용자 정의 ctype 패싯이 생성됩니다. 개행 문자(n)는 공백입니다. 이 사용자 정의 로케일을 입력 스트림 cin에 추가하면 추출 연산자(>>)가 콜론으로 구분된 각 필드를 읽습니다.

위 내용은 C에서 입력 스트림의 구분 기호를 어떻게 사용자 정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.