1

我有一些这样的输入:

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

我需要像这样对其进行消毒:

"aaaaa bbb cccccc ddddd neeee"

基本上:

  • 修剪字符串开头和结尾的所有空格
  • 剥离所有新行
  • 当有多个空格时去掉所有空格,但在单词之间总是留一个空格

有什么简单的方法可以做到这一点,或者我必须逐个字符地处理字符串并将适当的字符复制到不同的变量中?

4

2 回答 2

3

假设您无法就地修改字符串,

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);
于 2010-03-27T01:33:37.060 回答
0

您可以使用 strtok 对字符串进行词法标记,用“\r\n\t”分隔。这将使您的工作更轻松。

于 2010-03-27T00:44:58.857 回答