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

C 언어로 주어진 문자열에서 n개의 문자를 삭제하는 프로그램


문제 개요

이 글에서는 주어진 문자열의 특정 위치에서 n개의 문자를 삭제하는 사용자 정의 함수를 C 언어로 작성하는 방법을 알아봅니다. 여기서 문자열은 프로그램 실행 중에 사용자로부터 직접 입력받습니다.

해결 접근 방식

핵심 아이디어는 간단합니다. 삭제를 시작할 위치(p)와 삭제할 문자 수(n)를 입력받은 뒤, 반복문을 돌면서 해당 위치에 도달하면 인덱스를 n만큼 건너뛰어 나머지 문자들을 앞으로 당겨오면 됩니다.

알고리즘

다음은 주어진 문자열에서 n개의 문자를 삭제하기 위한 알고리즘입니다.

1단계 − 시작

2단계 − 실행 시점에 문자열을 입력받습니다

3단계 − 문자를 삭제하기 시작할 위치 p를 입력받습니다

4단계 − 해당 위치에서 삭제할 문자의 개수 n을 입력받습니다

5단계 − deletestr(str, p, n) 함수를 호출한 후 7단계로 이동합니다

6단계 − 종료

7단계 − 호출된 함수 deletestr(str, p, n)의 내부 동작은 다음과 같습니다

1. for i = 0, j = 0 to Length[str]
2. do if i = p-1
3. i = i + n
4. str[j] = str[i]
5. str[j] = NULL
6. print str

알고리즘 동작 원리

두 개의 인덱스 변수 i와 j를 사용합니다. i는 원본 문자열을 순회하고, j는 결과 문자열의 위치를 가리킵니다. i가 삭제 시작 위치(p-1)에 도달하면 i를 n만큼 앞으로 이동시켜 삭제할 구간을 건너뛰고, 그 이후의 문자들을 j 위치로 복사합니다. 마지막에 널 문자('\0')를 붙여 새로운 문자열을 완성합니다.

C 언어 예제 코드

다음은 주어진 문자열에서 n개의 문자를 삭제하는 전체 C 프로그램입니다.

#include <stdio.h>
#include <conio.h>

// 함수 원형 선언
void del_str(char [], int, int);

main(){
    int n, p;
    char str[30];
    printf("\n Enter the String:");
    gets(str);
    fflush(stdin);
    printf("\n Enter the position from where the characters are to be deleted:");
    scanf("%d", &p);
    printf("\n Enter Number of characters to be deleted:");
    scanf("%d", &n);
    del_str(str, p, n);
}

// 함수 정의
void del_str(char str[], int p, int n){
    int i, j;
    for(i=0, j=0; str[i]!='\0'; i++, j++){
        if(i == (p-1)){
            i = i + n;
        }
        str[j] = str[i];
    }
    str[j] = '\0';
    puts(" The string after deletion of characters:");
    puts(str);
}

코드 설명

  • del_str(char str[], int p, int n): 문자열, 삭제 시작 위치, 삭제할 문자 수를 매개변수로 받는 사용자 정의 함수입니다.
  • 반복문 안에서 i == (p-1) 조건이 참이 되는 순간, 즉 삭제할 위치에 도달하면 i = i + n으로 삭제할 구간을 한 번에 건너뜁니다.
  • 건너뛴 이후의 문자들은 j 인덱스를 따라 차례대로 앞쪽으로 복사되어, 삭제된 것처럼 문자열이 재구성됩니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter the String:Tutorials Point C programming

Enter the position from where the characters are to be deleted:10

Enter Number of characters to be deleted:6
The string after deletion of characters:
Tutorials C programming

위 예제에서는 "Tutorials Point C programming"이라는 문자열에서 10번째 위치부터 6개의 문자("Point ")를 삭제하여 "Tutorials C programming"이라는 결과를 얻었습니다.

참고 사항

예제 코드에서 사용된 gets() 함수는 버퍼 오버플로우 위험 때문에 현대의 C 표준(C11 이후)에서 제거되었습니다. 실무 환경에서는 안전한 대안인 fgets()scanf()에 필드 폭 지정자를 사용하는 것이 좋습니다. 또한 배열 크기를 충분히 크게 설정하여 입력 문자열이 잘리지 않도록 주의해야 합니다.