본문으로 건너뛰기

문자열

문자열의 개념

**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]);
}