Il y a une chaîneComment supprimer un caractère spécial dans C?
char *message = "hello#world#####.......";
Comment supprimer tous les "#" et le retour "helloworld"?
En Ruby je peux utiliser gsub pour y faire face
Il y a une chaîneComment supprimer un caractère spécial dans C?
char *message = "hello#world#####.......";
Comment supprimer tous les "#" et le retour "helloworld"?
En Ruby je peux utiliser gsub pour y faire face
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.
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;
}
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. –
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
Nice et le code clair, par opposition à la réponse cochée. –