C 언어에서 문자열 반전하기
문자열을 반전(거꾸로 뒤집는)하는 것은 C 언어 프로그래밍에서 자주 등장하는 기본적인 문제입니다. 이 글에서는 두 개의 인덱스를 활용해 문자열의 앞뒤 문자를 서로 교환(swap)하면서 가운데로 이동시키는 방식으로 문자열을 반전하는 방법을 예제와 함께 살펴보겠습니다.
예제 코드
#include<stdio.h>
#include<string.h>
int main() {
char s[50], t;
int i = 0, j = 0;
printf("\nEnter the string to reverse :");
gets(s);
j = strlen(s) - 1;
while (i < j) {
t = s[i];
s[i] = s[j];
s[j] = t;
i++;
j--;
}
printf("\nReverse string is : %s", s);
return (0);
}
실행 결과
위 프로그램을 컴파일 후 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Enter the string to reverse: Here is the input string.
Reverse string is : .gnirts tupni eht si ereH
코드 동작 원리
위 프로그램에서 실제로 문자열을 반전하는 핵심 로직은 main() 함수 내부에 구현되어 있습니다. 먼저 char 형 배열 s[50]을 선언하여 사용자가 입력한 문자열을 저장합니다.
그다음, 표준 라이브러리 함수인 strlen()을 사용해 문자열의 길이를 계산하고, 여기서 1을 빼 마지막 문자의 인덱스를 변수 j에 저장합니다.
j = strlen(s) - 1;
이후 while 루프 안에서 i번째 위치의 문자와 j번째 위치의 문자를 임시 변수 t를 이용해 서로 교환합니다. 매 반복마다 i는 1씩 증가하고 j는 1씩 감소하며, 두 인덱스가 만나거나 서로 교차하는 순간(i < j 조건이 거짓이 될 때) 반복이 종료됩니다. 이 과정을 통해 문자열 전체가 반전됩니다.
while (i < j) {
t = s[i];
s[i] = s[j];
s[j] = t;
i++;
j--;
}참고: gets() 함수의 보안 문제
예제에서 사용된 gets() 함수는 입력받을 크기를 제한할 수 없어 버퍼 오버플로우(buffer overflow) 위험이 있으며, 현재 C 표준(C11)에서는 제거된 함수입니다. 따라서 실제 개발 환경에서는 fgets()처럼 안전한 함수를 사용하는 것이 좋습니다.
fgets(s, sizeof(s), stdin);
s[strcspn(s, "\n")] = '\0'; // 개행 문자 제거
이처럼 안전한 입력 함수를 사용하면 버퍼 크기를 초과하는 입력으로부터 프로그램을 보호할 수 있으며, 나머지 반전 로직은 동일하게 적용됩니다.