[C언어 소스] 문자열에서 특정 문자 제거하기

안녕하세요. 언제나 휴일이예요.

이번에는 원본 문자열에서 특정 문자를 제거하는 소스 코드입니다.

반복문 내에서 특정 문자를 만나면 strcpy 함수를 사용합니다.

문자열에서 문자 제거
문자열에서 문자 제거

소스 코드

//문자열에서 문자 제거
#include <stdlib.h>
#include <stdio.h> 

void Eliminate(char *str, char ch);
int main(void)
{
    char str[] = "Hello World";
    Eliminate(str, 'l');
    printf("%s\n", str);
    return 0;
}

void Eliminate(char *str, char ch)
{
    for (; *str != '\0'; str++)//종료 문자를 만날 때까지 반복
    {
        if (*str == ch)//ch와 같은 문자일 때
        {
            strcpy(str, str + 1);
            str--;
        }
    }
}

 Visual Studio에서 문자열 관련 함수는 string.h를 포함하였을 때 함수 원형을 확인할 수 있어요.  다음은 Visual Studio에서 작업할 때의 소스 코드입니다.

//문자열에서 문자 제거
#include <string.h>
//#include <stdlib.h>
#include <stdio.h> 

void Eliminate(char *str, char ch);
int main(void)
{
    char source[256] = "";
    printf("입력 문자열:");
    gets_s(source, sizeof(source));

    printf("제거할 문자:");
char temp[256] = "";
scanf_s("%s", temp, sizeof(temp));
char ch = temp[0]; Eliminate(source, 'l'); printf("%s\n", source); return 0; } void Eliminate(char *str, char ch) { unsigned len = strlen(str) + 1; for (; *str != '\0'; str++,len--)//종료 문자를 만날 때까지 반복 { if (*str == ch)//ch와 같은 문자일 때 { strcpy_s(str,len, str + 1); str--; } } }

 C11 표준에서는 strcpy 함수 대신 strcpy_s 함수를 사용할 것을 권고합니다. strcpy 함수에서 문자열을 기록할 버퍼의 크기보다 쓰여질 문자열 길이가 컸을 때 버퍼 오버플로우 버그를 방지하기 위해서입니다. 

 물론 Eliminate 함수에서 버퍼 오버플로우 문제가 발생할 확률은 0%여서 strcpy_s 함수를 호출해서 문제를 해결할 필요는 없다고 판단할 수 있습니다.  이에 관한 판단은 여러분께서 하시길 바랍니다.

//문자열에서 문자 제거
#include <stdlib.h>
#include <string.h>
#include <stdio.h> 

void Eliminate(char *str, char ch);
int main(void)
{
    char source[256] = "";
    printf("입력 문자열:");
    gets_s(source, sizeof(source));

    printf("제거할 문자:");
    char temp[256] = "";
    scanf_s("%s", temp, sizeof(temp));
    char ch = temp[0];  

    Eliminate(source, ch);
    printf("%s\n", source);
    return 0;
}

void Eliminate(char *str, char ch)
{    
    int len = strlen(str) + 1;
    for (; *str != '\0'; str++,len--)//종료 문자를 만날 때까지 반복
    {
        if (*str == ch)//ch와 같은 문자일 때
        {
            strcpy_s(str, len,str + 1);
            str--;            
        }
    }
}