문자열
문자열의 개념
**String(문자열)**은 일련의 문자 집합을 의미하며, C 언어에서는 큰따옴표("
)를 사용하여 표현한다. 'c'와 같이 작은따옴표로 감싼 것은 단일 문자를 의미하는 반면, "c"는 문자가 하나라도 문자열 상수로 취급된다.
문자열은 메모리 내 문자 배열에 저장되며, 문자열의 끝은 항상 Null character(널 문자) \0
로 표시된다. 이 널 문자는 문자열의 끝을 나타내는 중요한 표식이므로, 문자열을 저장할 배열의 크기는 실제 문자 수보다 최소 1 이상 커야 한다.
문자열 및 문자 입출력 함수
한 줄 단위 입출력: gets()
와 puts()
gets()
: 공백을 포함한 한 줄 전체를 입력받아 문자 배열에 저장하는 함수이다.puts()
: 문자열을 출력한 뒤 자동으로 줄을 바꾸는 함수이다.
한 문자 단위 입출력과 버퍼링
getchar()
: **Line Buffering(라인 버퍼링)**을 사용하는 함수로, 사용자가 Enter 키를 누를 때까지 입력한 문자들을 버퍼에 임시 저장했다가 한 번에 프로그램에 전달한다.getche()
: 버퍼를 사용하지 않고 키를 누르는 즉시 문자를 입력받으며, 동시에 화면에 해당 문자를 보여주는(echo) 함수이다 (헤더 파일:conio.h
).getch()
:getche()
와 같이 버퍼를 사용하지 않지만, 입력한 문자를 화면에 보여주지 않는다 (no-echo). 주로 암호 입력과 같이 입력 내용을 숨겨야 할 때 사용된다 (헤더 파일:conio.h
).
문자 및 문자열 처리 함수
문자 처리 함수 (ctype.h
)
ctype.h
헤더 파일에는 문자의 종류를 판별하거나 문자를 변환하는 함수들이 정의되어 있다.
- 검사 함수 (
isxxx()
):isalpha()
,isdigit()
등, 문자가 특정 조건을 만족하는지 검사하여 참(0이 아닌 정수) 또는 거짓(0)을 반환한다. - 변환 함수 (
toxxx()
):toupper(c)
: 영문 소문자를 대문자로 변환한다.tolower(c)
: 영문 대문자를 소문자로 변환한다.
문자열 처리 함수 (string.h
)
string.h
헤더 파일에는 문자열을 다루는 다양한 표준 라이브러리 함수들이 포함되어 있다.
strlen(str)
: 문자열의 길이를 반환한다 (널 문자는 제외).strcpy(dest, src)
:src
문자열을dest
배열에 복사한다. 복사될dest
배열은src
문자열을 담을 충분한 공간이 확보되어야 한다.strcat(dest, src)
:src
문자열을dest
문자열 뒤에 이어 붙인다.dest
배열은 연결된 최종 문자열을 담을 충분한 공간이 필요하다.strcmp(str1, str2)
: 두 문자열을 사전 순서(아스키 코드 값 기준)로 비교한다.str1
<str2
: 음수 반환str1
>str2
: 양수 반환str1
==str2
: 0 반환
strtok(str, delimiters)
:str
문자열을delimiters
에 지정된 구분자들을 기준으로 여러 개의 작은 문자열(토큰)로 분리한다. 첫 호출 이후에는 첫 번째 인자로NULL
을 전달하여 동일한 문자열에서 다음 토큰을 계속 찾는다.sprintf(str, format, ...)
:printf
처럼 형식화된 출력을 화면 대신str
문자 배열에 저장한다.sscanf(str, format, ...)
:scanf
처럼 형식화된 입력을 키보드 대신str
문자열로부터 읽어온다.
2차원 문자 배열
여러 개의 문자열을 저장하기 위해 2차원 문자 배열을 사용할 수 있다. 이 경우, 배열의 행 크기는 문자열의 개수를, 열 크기는 가장 긴 문자열의 길이보다 최소 1 크게 지정해야 한다 (널 문자 공간 포함).
// 4개의 문자열을 저장하는 2차원 배열
char str_array[][5] = {"c", "c++", "java", "c#"};
// 배열의 각 문자열 출력
for (int i = 0; i < 4; i++) {
printf("%s\n", str_array[i]);
}