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

C 언어로 문장에서 공백 제거하기: 문자열 개념을 활용한 프로그램


문제 정의

런타임에 입력받은 문자열에서 while 루프를 사용해 각 인덱스의 문자가 공백인지 하나씩 검사하면서, 문장에 포함된 모든 공백을 제거하는 프로그램을 작성해 보겠습니다.

해결 방법

먼저 아래 예시를 살펴보겠습니다.

이 프로그램은 입력된 문자열에서 모든 공백을 제거합니다. 예를 들어 입력 문자열이 Tutorials Point C Programming이라면, 공백이 모두 제거된 결과는 TutorialsPointCProgramming이 됩니다.

C 언어에서 문자(character)들이 연속적으로 배열된 것을 문자열(string)이라고 부릅니다.

문자열의 선언 형식은 다음과 같습니다.

char stringname [size];

예를 들어 char string[50];은 최대 50자를 저장할 수 있는 문자열 배열을 선언하는 코드입니다.

초기화

문자열은 두 가지 방식으로 초기화할 수 있습니다.

  • 단일 문자 상수를 이용하는 방법
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 문자열 상수를 이용하는 방법
char string[10] = "Hello";

문자열 접근

문자열을 입출력할 때는 제어 문자열 "%s"를 사용하며, 이 경우 널 종료 문자('\0')를 만날 때까지 문자열 전체가 처리됩니다.

공백 제거 로직

문장 사이의 공백을 제거하기 위해 사용한 핵심 로직은 다음과 같습니다.

while(string[i]!='\0'){
    check=0;
    if(string[i]==' '){
       j=i;
       while(string[j-1]!='\0'){
          string[j] = string[j+1];
          j++;
       }
       check = 1;
    }
    if(check==0)
    i++;
}

동작 원리를 정리하면 다음과 같습니다. 현재 위치의 문자가 공백이면, 그 뒤에 있는 모든 문자를 한 칸씩 앞으로 당겨와 공백 자리를 덮어쓰고, 공백이 아니라면 인덱스를 하나 증가시켜 다음 문자로 이동합니다. 이 과정을 문자열의 끝(널 문자)까지 반복하면 문장 전체에서 공백이 사라집니다.

예제 코드

다음은 문자열 개념을 활용해 문장에서 모든 공백을 제거하는 완전한 C 프로그램입니다.

#include<stdio.h>
int main() {
    char string[50];
    int i=0, j, check;
    printf("Enter any statement: ");
    gets(string);
    while(string[i]!='\0') {
        check=0;
        if(string[i]==' ') {
            j=i;
            while(string[j-1]!='\0') {
                string[j] = string[j+1];
                j++;
            }
            check = 1;
        }
        if(check==0)
        i++;
    }
    printf("\nSentence without spaces: %s", string);
    getch();
    return 0;
}

실행 결과

위 프로그램을 컴파일하고 실행하면 다음과 같은 출력을 확인할 수 있습니다.

Run 1:
Enter any statement: Tutorials Point C Programming
Sentence without spaces: TutorialsPointCProgramming
Run 2:
Enter any statement: Welcome to the world of tutorials
Sentence without spaces: Welcometotheworldoftutorials

참고 사항

gets() 함수는 입력 크기를 제한할 수 없어 버퍼 오버플로우 위험이 있어 C11 표준에서 제거되었습니다. 실제 개발 환경에서는 fgets(string, sizeof(string), stdin)처럼 안전한 입력 함수를 사용하는 것이 좋습니다. 또한 getch()는 표준 C 함수가 아니라 conio.h를 제공하는 Windows 계열 컴파일러에서만 동작하므로, 리눅스 등 다른 환경에서는 제거하거나 대체 함수를 사용해야 합니다.