Удаление пробелов из строки в C? - PullRequest
42 голосов
/ 13 ноября 2009

Какой самый простой и эффективный способ удалить пробелы из строки в C?

Ответы [ 13 ]

0 голосов
/ 26 декабря 2016

Это самое простое, что я мог придумать (ИСПЫТАНО), и это работает !!

char message[50];
fgets(message, 50, stdin);
for( i = 0, j = 0; i < strlen(message); i++){
        message[i-j] = message[i];
        if(message[i] == ' ')
            j++;
}
message[i] = '\0';
0 голосов
/ 19 февраля 2016

Код взят из библиотеки zString

/* search for character 's' */
int zstring_search_chr(char *token,char s){
        if (!token || s=='\0')
        return 0;

    for (;*token; token++)
        if (*token == s)
            return 1;

    return 0;
}

char *zstring_remove_chr(char *str,const char *bad) {
    char *src = str , *dst = str;

    /* validate input */
    if (!(str && bad))
        return NULL;

    while(*src)
        if(zstring_search_chr(bad,*src))
            src++;
        else
            *dst++ = *src++;  /* assign first, then incement */

    *dst='\0';
    return str;
}

Пример кода

  Exmaple Usage
      char s[]="this is a trial string to test the function.";
      char *d=" .";
      printf("%s\n",zstring_remove_chr(s,d));

  Example Output
      thisisatrialstringtotestthefunction

Имейте llok в коде zString, вы можете найти его полезным https://github.com/fnoyanisi/zString

0 голосов
/ 13 ноября 2009

Я предполагаю, что строка C находится в фиксированной памяти, поэтому если вы заменяете пробелы, вам нужно сдвинуть все символы.

Кажется, проще всего создать новую строку и выполнить итерацию над исходной строкой и копировать только непробельные символы.

...