Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- program
- France
- history
- programming_book
- Spain
- QT
- Malaysia
- management
- Italy
- RFID
- leadership
- hadoop
- ubuntu
- web
- Python
- UK
- management and leadership
- Programming
- MySQL
- Kuala Lumpur
- Book
- Book review
- Linux
- erlang
- agile
- comic agile
- hbase
- django
- Java
- Software Engineering
Archives
- Today
- Total
문자열 치환(replace 함수 예제) 본문
원본: http://mwultong.blogspot.com/2006/10/c-string-replace-all.html
#include#include #include 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; }
Comments