C언어에서는 문자와 문자열을 다루기 위한 다양한 함수를 제공한다. 문자열의 길이를 반환하거나, 복사하거나, 이어 붙이는 등의 함수와 입/출력을 맡은 함수로 나뉜다.
char 자료형을 사용하여 단일 문자를 표현한다. 문자는 작은따옴표(' ')로 감싸서 표기하는 것이 원칙이다.
예시: char ch = 'A';
char 자료형의 배열을 사용하여 문자열을 표현한다. 문자열은 큰따옴표(" ")로 감싸서 표기하는 것이 원칙이다.
예시: char str[] = "Hello Sidney...";
C언어에는 문자열로 특정한 작업을 수행하는데 유용한 함수들이 내장되어 있다. 이를 사용하기 위해선 <string.h> 헤더 파일을 추가해야 된다.
문자열의 길이를 알아내는 함수
1. strlen(char* str);
2. strnlen(char* str, size_t maxLength);
1. '\0'를 포함하지 않고 문자열의 길이를 반환한다.
2. maxLength 값보다 작으면 문자열의 길이를 반환,
아닐 시 maxLength 값을 반환한다.
두 문자열을 비교하는 함수
1. strcmp(char* str1, char* str2);
2. strncmp(char* str1, char* str2, size_t 3);
1. 두 문자열을 이진 비교하여 값을 반환한다.
2. 두 문자열의 n자 까지만 비교하여 값을 반환한다.
// strcmp ex1: ABCDEF > ABCDE 양수
// strcmp ex2: ABCDE == ABCDE 0
// strcmp ex3: ABCDE < ABCDEF 음수
// strncmp ex: ABCDE == ABCZX 0 (ABC까지만 비교)
두 문자열을 이어붙이는 함수
1. strcat(char* str1, char* str2);
2. strncat(char* str1, char* str2, int n);
1. 두 문자열을 연결하고 연결된 문자열을 반환한다.
2. str2의 n개 문자를 str1 뒤에 연결하고 '\0'를 추가한다.
문자열을 복사하는 함수
1. strcpy(char* str1, char* str2);
2. strncpy(char* str1, char* str2, size_t n);
1. '\0'를 포함한 str2를 복사하여 str1에 덮어씌운다.
2. str2 문자열 n개를 복사하여 str1에 덮어씌운다.
// strncpy는 널 문자를 추가해주지 않으므로 주의
문자, 문자열을 검색하는 함수
1. strchr(char* str, int ch);
2. strrchr(char* str, int ch);
3. strstr(char* str1, char* str2);
1. str에서 문자 ch가 들어있는지 정순으로 검색하고
주소 값을 반환하고 없을 시 NULL을 리턴한다.
2. strchr과 달리 문자열의 뒤에서부터 역순으로 검색한다.
3. 문자가 아닌 문자열이 들어있는지 검색한다.
문자열을 분리하는 함수
strtok(char* str, const char* DEL);
"DEL"에 구분자로 사용할 문자열을 넣으면 이를 기준으로
문자열을 분리하고 결과를 주소 값으로 반환한다.
//ex1: 공백을 구분자로 사용할 경우 예시
char str[20] = "Oh Hello Sidney";
char *ptr = strtok(s1, " ");
while (ptr != NULL)
{
printf("%s\n", ptr);
ptr = strtok(NULL, " ");
}
잘린 문자열을 한 번에 얻을 수는 없기 때문에
while문으로 문자열을 반복해서 자르다가
더 이상 자를 수 없으면 반복이 멈추는 방식으로 사용된다.
아래의 함수들은 표준 입력 스트림 stdin에서 문자열을 입력 받는데 쓰이는 함수들이다. sizeof()연산자가 포함된 함수의 경우 입력 받을 수 있는 최대 문자 길이를 조절할 수 있다.
char ch = getchar();
실행되면 문자열 or 문자를 입력 받는다.
입력 받을 때마다 하나씩 입력 버퍼에 저장되고
개행 시 입력 버퍼에 저장된 값이 ch에 저장된다.
// ex: abc를 입력하고 엔터를 쳤다면 b가 저장된다.
Scanf("%s", str);
Scanf_s("%s", str, sizeof(str));
'\n'(개행)전까지 서식화된 문자열을 입력받는다.
입력 버퍼에 '\n'가 남으며,
('%c' 사용 시 주의 개행도 문자로 인식하기 때문에)
문자열 끝에 자동으로 널 문자'\0'를 붙인다.
공백을 읽지 못하므로 문자열 입력용으론 적합하지 않다.
//ex: AB CD\n -> AB -> AB\0 -> _
gets(str);
gets_s(str, sizeof(str));
'\n'(개행)전까지 문자열을 입력 받는다.
입력 버퍼에 '\n'이 있을 경우 널 문자 '\0'로 바꾼다.
공백을 출력할 수 있다.
//ex: AB CD\n -> AB CD\n -> AB CD\0 -> _
fgets(str, sizeof(str), stdin);
'\n'(개행)전까지 문자열을 입력 받는다.
gets와 달리 입력 버퍼에 '\n'가 남으므로
연속 입력 시엔 별도로 버퍼를 비워야한다.
문자열 끝에 자동으로 널 문자'\0'를 붙인다.
//ex: AB CD\n -> AB CD\n -> AB CD\0 -> \n
아래의 함수들은 표준 출력 스트림 stdout에서 문자열을 출력하는데 쓰이는 함수들이다.
putchar(int ch);
단일 문자를 출력한다.
출력 버퍼를 거치지 않고 즉시 출력된다.
printf("%s", str);
서식화된 문자열을 출력한다.
서식 문자를 사용해 출력을 서식화할 수 있다.
'\n'(개행)을 만나거나 버퍼가 가득찼을 때
버퍼에 있는 문자열을 출력한다.
puts(str);
문자열을 출력하고 '\n'(개행)을 추가한다.
'\n'(개행)을 만나거나 버퍼가 가득찼을 때
버퍼에 있는 문자열을 출력한다.
fputs(str, stdout);
해당 스트림에 문자열을 출력할 때 사용된다.
자동으로 개행되지 않는다.
\0
를 항상 염두해야 함.2023년 06월 11일: strcmp 함수 틀린 내용 수정