1

次のような入力があります。

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

そして、次のようにサニタイズする必要があります。

"aaaaa bbb cccccc ddddd neeee"

基本的:

  • 文字列の先頭と末尾のすべての空白を削除します
  • すべての新しい行を取り除く
  • 複数のスペースがある場合はすべてのスペースを取り除きますが、単語の間には常に 1 つのスペースを残します

これを行う簡単な方法はありますか、または文字列を 1 文字ずつ処理し、適切な文字を別の変数にコピーする必要がありますか?

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 に答える