조회 수 38382 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

1. Java 언어의 String.replace() 메쏘드와 유사한 기능의 C 함수입니다
2. Visual C/C++ 6.0 및 gcc에서 잘 동작하도록 작성되었습니다.
3. 메모리 누수(memory leak) 현상을 최대한 줄이려고 노력하였답니다.

출처: http://blog.empas.com/javaclue/22720841

#include <stdio.h>
#include <string.h>

#define FREE(x) if(x != NULL){free(x); x = NULL;}

/* --------------------------------------------------------
   replaceAll(char *srcStr, char *patStr, char *repStr)
    Convert a string to another string in which
    every substring, matched with the given pattern,
    is replaced to the given replacement substring.
    The source string is not changed.
   Parameters
    srcstr: the source string
    patstr: the pattern substring to be matched
    repstr: replacement substring
   Returns
    the new string.
   -------------------------------------------------------- */
char *replaceAll(char *srcstr, char *patstr, char *repstr)
{
 char *str = srcstr;
 char *idx;
 char *newstr = NULL;         // new string with replaced stuff
 char *tmpstr;                // temporary pointer to a string
 char *pstr = newstr;
 int replen = strlen(repstr);
 int patlen = strlen(patstr);
 int newlen = 0;
 int counter = 0;
 int sizealloc = 0;

 if (patlen < 1)
 {
  sizealloc = strlen(srcstr) + counter*(replen - patlen) + 1;
  tmpstr = (char *) realloc(newstr, sizealloc);

  if (tmpstr == NULL)
  {
   fprintf(stderr, "ERROR: realloc failed");
   if (newstr)
    free(newstr);
   newstr = NULL;
   return NULL;
  }

  newstr = tmpstr;
  newstr = strcpy(newstr, srcstr);
  return newstr;
 }

 while (idx = strstr(str, patstr))
 {
  counter++;
  str = idx + patlen;
 }

 if (counter > 0)
 {
  str = srcstr;
  sizealloc = strlen(srcstr) + counter*(replen - patlen) + 1;
  tmpstr = (char *) realloc(newstr, sizealloc);

  if (tmpstr == NULL)
  {
   fprintf(stderr, "ERROR: realloc failed");
   if (newstr)
    free(newstr);
   newstr = NULL;
   return NULL;
  }
  newstr = tmpstr;
  pstr = newstr;

  while (idx = strstr(str, patstr))
  {
   if (idx - str > 0)
   {
    newstr = strncat(newstr, str, idx - str);
   }
   newstr = strcat(newstr, repstr);
   str = idx + patlen;
  }
 }
 else
 {
  sizealloc = strlen(srcstr) + counter*(replen - patlen) + 1;
  tmpstr = (char *) realloc(newstr, sizealloc);

  if (tmpstr == NULL)
  {
   fprintf(stderr, "ERROR: realloc failed");
   if (newstr)
    free(newstr);
   newstr = NULL;
   return NULL;
  }
  newstr = tmpstr;
  newstr = strcpy(newstr, srcstr);
 }

 return newstr;
}


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
25 C C에서 파일 존재여부 체크 (check file exist) 2019.07.02 18413 0
24 C 정규식 테스트 사이트 2012.09.20 17466 0
» C C언어용 문자열 replaceAll 함수 2009.02.09 38382 0
22 C Printf 사용하기 file 2008.10.11 34165 0
21 C 16진수 문자열을 Int 형으로 변환하는 함수 1 2006.05.11 45406 0
20 C Base64 로 encoding / decoding 하는 예제 file 2005.09.22 25920 0
19 C 64bit DES 암복호화 코드 1 file 2005.09.22 33264 0
18 C 병합 정렬 Merge Sort file 2005.08.10 35199 0
17 C 힙 정렬 Heap Sort file 2005.08.10 38304 0
16 C 퀵 정렬 Quick Sort file 2005.08.10 38744 0
15 C 쉘 정렬 Shell Sort file 2005.08.10 33222 0
14 C 거품정렬 Bubble Sort file 2005.08.10 32669 0
13 C 삽입정렬 Insertion Sort file 2005.08.10 32938 0
12 C 선택정렬 Selection Sort file 2005.08.10 34227 0
11 C Queue 큐 (Linked List로 구현) file 2005.08.10 42106 0
목록
Board Pagination ‹ Prev 1 2 Next ›
/ 2

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5