Удаление пробелов и переносов строк в C - PullRequest
1 голос
/ 27 марта 2010

У меня есть такой ввод:

"  aaaaa      bbb \n cccccc\n ddddd \neeee   "

И мне нужно продезинфицировать это так:

"aaaaa bbb cccccc ddddd neeee"

В основном:

  • Обрезать все пробелы в начале и конце строки
  • Удалите все новые строки
  • Убрать все пробелы, если их несколько, но всегда оставляйте ОДИН пробел между словами

Есть ли какой-нибудь простой способ сделать это, или мне придется обработать строку, char по char и скопировать соответствующие символы в другую переменную?

Ответы [ 2 ]

3 голосов
/ 27 марта 2010

Если вы не можете изменить строку на месте,

void splcpy(char *s, char *m){ //s is the unmodified string
  int word = -1; //keeps track what was stored in last loop
  while(*s){  //until it ends
    if(!isspace(*s)){
      if(word==0)  *m++ = ' '; //if last char was space, add space
      *m++ = *s++;
       word = 1;
    }
    else{
      if(word == 1)   word = 0; //if last char was !space
      while(isspace(*s++)); //consume all space until end
    }
  }
  *m = '\0'; //end the string nicely
}

char *input = "  aaaaa      bbb \n cccccc\n ddddd \neeee   ";
char *modified = malloc(sizeof(char) * strlen(input));

splcpy(input, modified);
0 голосов
/ 27 марта 2010

Вы можете использовать strtok для лексического токенизации строки, разделив ее «\ r \ n \ t». Это облегчит вашу работу.

...