C++ 문자열 및 문자 입력 정리
헷깔려서 적은 문자 및 문자열 관련 입력 정리 (유니코드는 제외했다.)
포스트에서 활용할 변수들
string 객체
1
2
#include <iostream>
std::string str;
비고: STL에서 제공하는 클래스
- 문자열 끝에
'\0'
문자가 들어가지 않음 <iostream>
헤더는<string>
헤더를 내부적으로 포함함.
char형 배열
1
char str[20];
FILE 구조체 포인터
1
FILE * fp;
비고: 파일 입출력에 관한 내용은 참고자료 참조
cin 클래스
정의: <istream>
(지금부터 설명할 cin
의 멤버함수들도 <istream>
헤더에 정의되어 있다.)
비고: <istream>
헤더는 string
클래스가 추가되기 전부터 C++의 일부였기에 string
형은 인식하지 못한다고 함.
» 연산자
1
2
3
4
5
6
std::string str1
char str2[20];
std::cin >> str1;
std::cin >> str2;
//사용법: cin >> "입력받을 변수"
입력 종류: 공백을 포함하지 않은 문자열, 문자
사용 변수: string 객체
, char형 배열
, char형 변수
cin.getline(char*, int)
1
2
3
4
5
char str[20];
std::cin.getline(str, 20);
//첫 번째 매개변수: (char형) 입력받은 문자열을 저장할 배열
//두 번째 매개변수: 저장할 문자의 수 +1 (맨 마지막 문자는 '\0' 문자를 넣어야 함)
입력 종류: 공백을 포함한 문자열
사용 변수: char형 배열
cin.get(char*, int)
1
2
3
4
5
char str[20];
std::cin.get(str, 20);
//첫 번째 매개변수: (char형) 입력받은 문자열을 저장할 배열
//두 번째 매개변수: 저장할 문자의 수 +1 (맨 마지막 문자는 '\0' 문자를 넣어야 함)
입력 종류: 공백을 포함한 문자열
사용 변수: char형 배열
비고: 앞서 설명한 getline
멤버함수와 같지만, 버퍼의 '\n'
개행문자가 제거되지 않는다는 차이점이 있다.
cin.get()
1
2
char ch;
ch = std::cin.get();
입력 종류: 문자
사용 변수: char형 변수
비고: 문자(개행포함)를 단 하나만 입력받는 cin.get
함수의 다른 사용법.
<stdio.h>에 정의된 일반 함수
비고: 함수의 return
값은 적지 않음.
getline(FILE*, std::string, int)
1
2
3
4
5
6
7
8
9
std::string str;
FILE * fp = fopen("file_name", "r");
getline(cin, str);
getline(fp, str, 20);
fclose(fp);
//첫 번째 매개변수: 파일 포인터
//두 번째 매개변수: 입력 받을 변수 (string 형)
//세 번째 매개변수: 저장할 문자의 수
입력 종류: 공백을 포함한 문자열
사용 변수: string 객체
scanf(const char *, …)
1
2
3
4
5
6
char ch;
char str[20];
scanf("%s %c", str, ch);
// 첫 번째 매개변수: 입력받을 변수의 종류를 적은 문자열
// 두 번째 + α 매개변수: 입력받을 변수들
입력 종류: 공백을 포함하지 않은 문자열, 문자
사용 변수: char형 배열
, char형 변수
fscanf(FILE*, const char *, …)
1
2
3
4
5
6
7
8
char str[20];
FILE * fp = fopen("file_name", "r");
fscanf(fp, "%s %c", str, ch);
fclose(fp);
// 첫 번째 매개변수: 파일 포인터
// 두 번째 매개변수: 입력받을 변수의 종류를 적은 문자열
// 세 번째 + α 매개변수: 입력받을 변수들
입력 종류: 공백을 포함하지 않은 문자열, 문자
사용 변수: char형 배열
, char형 변수
비고: scanf
와 입력되는 방식은 같으나, scanf
는 표준입력, fscanf
는 파일에서 입력을 가져온다는 차이점이 있다.
getchar()
1
2
char ch;
ch = getchar();
입력 종류: 문자
사용 변수: char형 변수
getc(FILE*)
1
2
3
4
char ch;
ch = getc(stdin);
// 첫 번째 매개변수: 파일 포인터
입력 종류: 문자
사용 변수: char형 변수
비고: getc(stdin)
은 getchar()
와 완전히 같다.
fgetc(FILE*)
비고: getc()
함수와 기능은 완전히 같으나, 기능 호출로만 정의되고, 매크로로 대체되지 않음.
gets(char*)
1
2
3
4
char str[20];
gets(str);
// 첫 번째 매개변수: 입력 받을 변수
입력 종류: 공백을 포함한 문자열
사용 변수: char형 배열
비고: 글자 수에 상관없이 입력을 받기 때문에 메모리 공간까지 침범할 가능성이 존재함.
fgets(char*, int, FILE*)
1
2
3
4
5
6
char str[20];
fgets(str, 20, stdin);
// 첫 번째 매개변수: 입력 받을 변수
// 두 번째 매개변수: 저장할 문자의 수 +1 (맨 마지막 문자는 '\0' 문자를 넣어야 함)
// 세 번째 매개변수: 파일 포인터
입력 종류: 공백을 포함한 문자열
사용 변수: char형 배열
비고: 입력받을 문자의 수를 입력하므로 두 번째 매개변수를 잘못 입력하지 않는 한 메모리 공간 침범 가능성이 적음.
입력과 관련된 함수
cin.clear()
1
std::cin.clear();
비고: cin.get()
함수가 빈 행을 읽으면 failbit
라는것이 설정. 한마디로 계속되는 입력을 막는 것. 이를 해제하기 위해서 사용하는 함수이다.
ungetc(int c, FILE * stream)
1
2
3
4
5
char ch = 'c';
ungetc(ch, stdin);
// 첫 번째 매개변수: 입력할 문자
// 두 번째 매개변수: 파일 포인터
비고: ch
를 파일 맨앞에 넣을 수 있는 함수. 두 번째 매개변수에 stdin
을 입력하면 버퍼에 ch
가 들어감. 주로 입력받은 문자를 다시 넣을 때 사용.
참고자료
- C++ PRIMER PLUS (Stephen Prata 지음, 맹철규 번역)
- IBM C, C++ 라이브러리 함수 정리
- 세종대학교 C언어 기초 가이드 STEP2
- Rebro님의 블로그 - string 클래스 정리 및 사용법과 응용