2010-12-28 5 views

Répondre

3

En C, vous devez le faire vous-même. Par exemple:

#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; 
} 

Notez que dans cette implémentation, l'appelant devrait libérer la chaîne de résultat.

+0

Nice et le code clair, par opposition à la réponse cochée. –

1

Je crois qu'il existe un meilleur algorithme pour ce faire .... aucune libération n'est nécessaire - c'est en place.

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

Notez que le caractère 'char *' de la question est initialisé pour pointer vers un littéral de chaîne, qui ne peut pas être écrit en toute sécurité. Alors oui, la mémoire doit être allouée pour stocker le résultat. –

+0

C'est en fait quelque chose qui ne tient pas, car ma signature nécessite un char *, et non un const char *. Bien que C vous permette de transmettre des littéraux de chaîne sous la forme de char * ... alors, il suppose que l'utilisateur final sait ce qu'il fait en premier lieu. Mais d'accord - vous ne pouvez pas écrire du tout. – tperk

Questions connexes