Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 문자열 완벽 정리: 핵심 개념과 연습 문제

문자열(String)은 프로그래밍에서 가장 기본적이면서도 중요한 데이터 유형 중 하나입니다. 문자열은 본질적으로 문자형(char) 배열이며, GATE와 같은 경쟁 시험에서도 단골 출제 주제입니다. 이번 글에서는 C++ 문자열의 핵심 개념을 먼저 정리한 뒤, 실제 출력 결과를 예측하는 연습 문제를 통해 개념을 확실히 다져 보겠습니다.

C++에서 문자열을 저장하는 두 가지 방법

C++에서 문자열은 크게 두 가지 방식으로 저장할 수 있습니다.

  • 문자 배열 사용: char str[size];
  • 포인터 사용: char *ch = "Hello";

두 방식은 비슷해 보이지만 동작 방식에 중요한 차이가 있으며, 다음 사항을 반드시 기억해야 합니다.

  • 문자열의 크기를 구할 때는 sizeof 연산자에 문자열 리터럴이 아닌 문자 배열 변수를 전달해야 합니다. 예: sizeof(str)
  • 모든 문자열의 끝은 널(null) 문자 '\0'으로 표시되며, 이를 통해 문자열의 종료 지점을 판단합니다.
  • 문자열의 길이를 구할 때는 표준 라이브러리 함수 strlen()을 사용합니다.
  • 문자열의 내용을 수정하려면 반드시 char 배열을 사용해야 하며, 포인터가 가리키는 문자열 리터럴은 개별 문자를 직접 변경할 수 없습니다.

연습 문제: 출력 결과 예측하기

이제 앞서 배운 개념을 바탕으로 몇 가지 코드의 출력 결과를 예측해 보겠습니다.

예제 1: 포인터 증가

char name[] = "TutorialsPoint";
char *ptr = name;
cout << ++ptr;

출력:

utorialsPoint

++ptr은 포인터 값을 1 증가시키므로 출력이 인덱스 1(두 번째 문자)부터 시작됩니다. 그 결과 첫 번째 문자 'T'가 생략된 문자열이 출력됩니다.

예제 2: 역순 출력

char name[] = "TutorialsPoint";
int length = strlen(name);
for(int i = length; i > 1; i--)
    printf("%c", name[i]);

출력:

tniopslairot

루프가 문자열 길이부터 인덱스 1까지 역순으로 순회하며 문자를 하나씩 출력하기 때문에 문자열이 거꾸로 출력됩니다.

예제 3: 포인터 산술 연산

char c[] = "LearnProgrammingAtTutorialsPoint";
char *p = c;
printf("%s", p + c[1] - c[2] + 1);

출력:

ProgrammingAtTutorialsPoint

여기서 c[1]은 'e'(ASCII 101), c[2]는 'a'(ASCII 97)이므로 p + 101 - 97 + 1, 즉 p + 5가 됩니다. 따라서 인덱스 5부터 나머지 문자열 전체가 출력됩니다.

마무리

문자열과 포인터의 관계를 이해하는 것은 C++ 학습에서 매우 중요합니다. 특히 포인터 산술 연산과 널 문자('\0')의 역할을 정확히 이해하면 위와 같은 문제를 손쉽게 해결할 수 있습니다. 다양한 예제를 직접 작성하고 실행해 보면서 개념을 완전히 익혀 보시기 바랍니다.