2010-12-28 21 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

関連する問題