C++ Principle 11편


11편

입출력 맞춤화

ostream

c++에서 다루는 스트림의 가장 상위 클래스

stringstream

  • stringstream이란 문자열을 스트림화하는 것이다.
  • 그렇다면 일반적인

바이너리 모드

iostream은 주로 문자열을 다룬다고 했었다.
istream은 문자열을 읽어 C++ 내 원하는 자료형으로 바꿔주는 역할을 한다.
ostream은 C++ 자료형을 문자열로 바꾸어서 내보내는 역할을 한다.
그런데 이렇게 문자열말고 바이너리(바이트)를 주고 받아야 할 때가 있다. 이때는 iostream은 바이트와 문자열을 조작하지 않고 그대로 넘겨주게 된다.

  • 예를 들면 사진이나 이미지에 접근할 때가 그렇다. 문자열로 표현할 수 없기 때문에 바이너리를 주고 받아야 하는 경우가 생긴다.

바이너리란 ?

바이너리란 컴퓨터가 읽을 수 있는 0,1로만 이루어진 형식을말한다. 바이너리 파일은 0,1로만 이루어진 파일이다.

파일 포인터 지정하기

가능하다면 파일의 처음부터 끝까지 차례대로 읽고 쓰는 것이 가장 좋다. 심플 이즈 베스트 그러나 꼭 필요하면 파일 안에서 읽거나 쓸 위치를 지정할 수도 있다.
기본 적으로 읽기 용으로 연 모든 파일에는 ‘읽기 위치’가 존재하며 쓰기용으로 연 모든 파일에는 ‘쓰기 위치’가 존재한다.

fstream fs

행 지향 입력

연산자는 주어진 타입의 표준 형식에 따라 그 타입의 객체에 값을 읽는다. 예를 들어 int를 읽을 때 »는 숫자가 아닌 문자를 마주칠 때까지 읽고, string을 읽을 때 »는 공백 문자가 나올 때까지 입력을 수행한다. 표준 라이브러리의 istream 라이브러리는 이에 더해 한 행의 문자를 통째로 읽는 기능도 제공한다.

string name;
cin >> name;  // 입력 : cs louis
cout << name << '\n'; // 출력 : cs

string name; 
getline(cin, name); // 입력 : cs louis
cout << name << '\n';  // 출력 : cs louis


오랜만에 선릉에 있는 초밥집을 갔다.   
마침 일요일이라 문을 닫아 다른 음식점에 가야했다. 

string command; 
getline(cin, command); // 한 행씩 읽기

stringstream ss {command};
vector<string> words;
for(string s; ss>> s;)
{
	words.push_back(s);
}
문자 분류 
isspace(c)c가 공백 문자(‘ ‘, ‘\t’, ‘\n’)인가?
isalpha(c)c가 알파뱃인가
isdigit(c)c가 숫자인가
isxdigit(c)c가 16진수 숫자(‘a’…‘f’ or ‘A’…‘F’)인가
isupper(c)c가 대문자인가
islower(c)c가 소문자인가
isalnum(c)c가 알파뱃이거나 숫자인가
iscntrl(c)c가 제어문자(ASCII 0…31 or 127)
isprint(c)c가 출력 가능 문자9ASCII ‘ ‘..’~’





© 2017. by yunsu

Powered by dolphin