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 |