2010-12-28 6 views

답변

3

처리 할 GSUB 사용할 수 있습니다, 당신은 스스로를해야한다. 예를 들면 다음과 같습니다.

#include <string.h> 

char *remove_all(const char *source, char c) 
{ 
    char *result = (char *) malloc(strlen(source) + 1); 
    char *r = result; 
    while (*source != '\0') 
    { 
     if (*source != c) 
      *r++ = *source; 
     source++; 
    } 

    *r = '\0'; 
    return result; 
} 

호출자는 결과 문자열을 확보해야합니다.

+0

확인 된 답변과는 대조적으로 좋고 명확한 코드. –

1

나는 이것을하기위한 더 좋은 알고리즘이 있다고 믿는다 .... 자유는 필요 없다 - 그것은 제자리에있다.

char *remove_all(char *string, char c) 
{ 
    int idx = 0; 
    char *beg = string; 
    while(*string) { 
     if (*string != c) 
     beg[idx++] = *string; 
     ++string; 
    } 
    beg[idx] = 0; 

    return beg; 
} 
+0

질문에 'char *'가 안전하게 쓰여지지 않는 문자열 리터럴을 가리 키도록 초기화됨을 알 수 있습니다. 그래서 예, 결과를 저장하기 위해 메모리를 할당해야합니다. –

+0

사실, 서명에는 char *가 필요하고 const char *는 필요하지 않습니다. C는 문자열 리터럴을 char *로 전달할 수 있지만, 다시 말하면 최종 사용자는 자신이 무엇을하고 있는지를 알고 있다고 가정합니다. 그러나 동의했다 - 당신은 문자열 리터럴에 전혀 쓸 수 없다. – tperk

관련 문제