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

라이브러리 함수 없이 문자열을 뒤집는 C 프로그램 작성 방법

C 프로그래밍에서 문자열을 역순으로 뒤집는 작업은 자주 만나게 되는 기본 문제입니다. 이 글에서는 라이브러리 함수 strrev()를 사용하는 방법과, 라이브러리 함수에 의존하지 않고 직접 알고리즘을 구현하는 방법 두 가지를 예제와 함께 살펴보겠습니다.

strrev() 함수를 사용한 방법

  • strrev() 함수는 문자열을 역순으로 뒤집는 데 사용됩니다.
  • 뒤집힌 결과는 원본 문자열이 담긴 동일한 배열에 그대로 저장됩니다.
  • 참고로 strrev()는 표준 C 라이브러리가 아니며, Turbo C 등 일부 컴파일러에서만 제공되는 비표준 함수입니다.

구문

strrev(string);

함수 없이 문자열을 뒤집는 프로그램을 작성하기 전에, 먼저 strrev() 함수를 활용한 예제를 확인해 보겠습니다. 두 방식을 비교하면 차이점을 쉽게 파악하고 개념을 명확하게 이해할 수 있습니다.

예제 코드

#include <stdio.h>
#include <string.h>

int main() {
    char a[50];
    printf("enter a string : ");
    scanf("%s", a);
    strrev(a);
    printf("reversed string = %s", a);
    return 0;
}

실행 결과

enter a string : Hello
reversed string = olleH

strrev() 함수 없이 직접 구현하기

이번에는 strrev() 함수를 사용하지 않고 문자열을 뒤집는 프로그램을 직접 작성해 보겠습니다.

동작 원리

  • strlen()으로 문자열의 전체 길이를 구한 후, 마지막 문자의 인덱스(length)를 계산합니다.
  • 반복문을 돌면서 문자열의 앞쪽 문자와 뒤쪽 문자를 임시 변수 temp를 이용해 서로 교환(swap)합니다.
  • 교환이 한 번 일어날 때마다 뒤쪽 인덱스를 하나씩 감소시켜, 양 끝에서부터 가운데로 이동하며 전체를 뒤집습니다.
  • 교환 횟수는 문자열 길이의 절반(strlen(string)/2)이면 충분합니다.

예제 코드

#include <stdio.h>
#include <string.h>

int main() {
    char string[20], temp;
    int i, length;
    printf("Enter String : ");
    scanf("%s", string);
    length = strlen(string) - 1;
    for(i = 0; i < strlen(string) / 2; i++) {
        temp = string[i];
        string[i] = string[length];
        string[length--] = temp;
    }
    printf("\nReverse string : %s", string);
    return 0;
}

실행 결과

Enter String : Tutorialspoint
Reverse string : tniopslairotuT

이처럼 반복문과 임시 변수만 활용하면 라이브러리 함수 없이도 간단히 문자열을 뒤집을 수 있습니다. 이 방식은 특정 컴파일러에 종속되지 않고 어디서든 동작한다는 장점이 있으며, 여기에 포인터를 더하면 더욱 효율적인 구현도 가능합니다.