#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *replaceAll(char *s, const char *olds, const char *news);
void main(void){
char s[] = "봉숭아 학당! 봉숭아 학당! 봉숭아 학당! 봉숭아 학당!";
char *s2;
printf("원본: %s\n", s);
s2 = replaceAll(s, "봉숭아", "맹구");
// 에러가 있으면 NULL 을 리턴. 에러가 없으면 결과 출력
(s2 != NULL) ? printf("치환: %s\n", s2) : fputs("Replace String Error...\n", stderr);
}
char *replaceAll(char *s, const char *olds, const char *news) {
char *result, *sr;
size_t i, count = 0;
size_t oldlen = strlen(olds); if (oldlen < 1) return s;
size_t newlen = strlen(news);
if (newlen != oldlen) {
for (i = 0; s[i] != '\0';) {
if (memcmp(&s[i], olds, oldlen) == 0) count++, i += oldlen;
else i++;
}
} else i = strlen(s);
result = (char *) malloc(i + 1 + count * (newlen - oldlen));
if (result == NULL) return NULL;
sr = result;
while (*s) {
if (memcmp(s, olds, oldlen) == 0) {
memcpy(sr, news, newlen);
sr += newlen;
s += oldlen;
} else *sr++ = *s++;
}
*sr = '\0';
return result;
}
출처:
출처:
반응형
'IT-개발,DB' 카테고리의 다른 글
[개발/MFC] error LNK2005: --- .obj에 이미 정의되어 있습니다. 오류 (0) | 2012.01.05 |
---|---|
[개발/C++] 형 변환 char* to string or string to char* (0) | 2012.01.03 |
[개발/VC++] warning LNK4098: 'libcmt.lib' defaultlib가 다른 라이브러리와 충돌합니다 (0) | 2012.01.02 |
[개발/C++] error LNK2019: __imp__PathRemoveFileSpecA@4 외부 기호 (0) | 2011.12.28 |
[개발/VC++] pragma 지시어에 대하여 (0) | 2011.12.28 |
댓글