[카테고리:] <span>C언어 소스</span>

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

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

반복문 내에서 특정 문자를 만나면 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--;            
        }
    }
}

 

C언어 소스