Как удалить специальный символ в C? - PullRequest
0 голосов
/ 28 декабря 2010

Есть строка

char *message = "hello#world#####.......";

Как удалить все "#" и вернуть "helloworld"?

В Ruby я могу использовать gsub для решения этой проблемы

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

В Си, ты должен сделать это сам. Например:

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

Обратите внимание, что в этой реализации вызывающая сторона должна освободить строку результата.

1 голос
/ 02 января 2011

Я считаю, что есть лучший алгоритм для этого .... освобождение не требуется - оно на месте.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...