CS/C

C언어로 replace() 구현하기

munsik22 2025. 2. 7. 19:11

Python의 replace() 함수를 C로 구현한 코드입니다.

char* replace(const char* str, const char* old_sub, const char* new_sub) {
    if (str == NULL || old_sub == NULL || new_sub == NULL) {
        return NULL;
    }
    
    char *pos = strstr(str, old_sub);
    if (pos == NULL) {
        char *result = malloc(strlen(str) + 1);
        strcpy(result, str);
        return result;
    }

    size_t old_len = strlen(old_sub);
    size_t new_len = strlen(new_sub);
    size_t result_len = strlen(str) - old_len + new_len;

    char *result = malloc(result_len + 1);
    if (result == NULL) {
        return NULL;
    }

    size_t prefix_len = pos - str;
    strncpy(result, str, prefix_len);
    strcpy(result + prefix_len, new_sub);
    strcpy(result + prefix_len + new_len, pos + old_len);

    return result;
}

 

헤더 파일에 위 코드를 작성하고 메인 파일에 include하면 편하게 사용할 수 있겠죠?


[프로그래머스] 옹알이 (1) Lv.0

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

사용례는 다음과 같습니다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* replace(const char* str, const char* old_sub, const char* new_sub) {
    if (str == NULL || old_sub == NULL || new_sub == NULL) {
        return NULL;
    }
    
    char *pos = strstr(str, old_sub);
    if (pos == NULL) {
        char *result = malloc(strlen(str) + 1);
        strcpy(result, str);
        return result;
    }

    size_t old_len = strlen(old_sub);
    size_t new_len = strlen(new_sub);
    size_t result_len = strlen(str) - old_len + new_len;

    char *result = malloc(result_len + 1);
    if (result == NULL) {
        return NULL;
    }

    size_t prefix_len = pos - str;
    strncpy(result, str, prefix_len);
    strcpy(result + prefix_len, new_sub);
    strcpy(result + prefix_len + new_len, pos + old_len);

    return result;
}

int is_valid(const char* str, size_t len){
    for(int i=0; i<len; i++){
        if(str[i] != '*') return 0;
    }
    return 1;
}

int solution(const char* babbling[], size_t babbling_len) {
    int answer = 0;
    for(int i=0; i<babbling_len; i++){
        char* tmp;
        tmp = replace(babbling[i], "aya", "*");
        tmp = replace(tmp, "ye", "*");
        tmp = replace(tmp, "woo", "*");
        tmp = replace(tmp, "ma", "*");
        answer += is_valid(tmp, strlen(tmp));
    }
    return answer;
}

 

'CS > C' 카테고리의 다른 글

C언어로 이진 트리 구현하기  (0) 2025.04.12
GPT야, 3.9와 3.11 중에 무엇이 더 큰 수야?  (0) 2025.02.07
C언어로 BFS 구현하기  (0) 2025.02.07
C언어로 DFS 구현하기  (0) 2025.02.07
C언어로 gcd()와 lcm() 구현하기  (0) 2025.02.07