从C语言中具有特殊字符的句子中删除额外空格

从C语言中具有特殊字符的句子中删除额外空格,c,string,pointers,c-strings,C,String,Pointers,C Strings,我有一句话: irmovq $5 , %r1 我想把它转换成: irmovq $5, %r1 也就是说,我想从这个字符串中删除额外的空格。 实现这种微调功能的最佳方法是什么 #include <ctype.h> #include <stdio.h> void remove_extra_spaces(char* str) { int i, x; for(i=x=0; str[i]; ++i) if(!isspace(str[i

我有一句话:

    irmovq   $5    ,     %r1
我想把它转换成:

irmovq $5, %r1

也就是说,我想从这个字符串中删除额外的空格。 实现这种微调功能的最佳方法是什么
#include <ctype.h>
#include <stdio.h>

void remove_extra_spaces(char* str) {
  int i, x;
  for(i=x=0; str[i]; ++i)
    if(!isspace(str[i]) || (i > 0 && !isspace(str[i-1])))
      str[x++] = str[i];
  str[x] = '\0';
}

int main(int argc, char* argv[]) {
  char str[] = "    irmovq   $5    ,     %r1";
  remove_extra_spaces(str);
  printf("%s\n",str);
  return 0;
}
#包括 void删除多余的空格(char*str){ int i,x; 对于(i=x=0;str[i];++i) if(!isspace(str[i])|(i>0&!isspace(str[i-1])) str[x++]=str[i]; str[x]='\0'; } int main(int argc,char*argv[]){ 字符str[]=“irmovq$5,%r1”; 删除多余的空格(str); printf(“%s\n”,str); 返回0; }
逗号前有一个空格。在这里使用
str
作为指针并在循环中前进也是比较传统的做法,但这是一个很好的第一步。我怀疑
remove\u extra\u spaces()
可能会留下一个尾随空格。尝试
“^^irmovq^^$5^^,^^%r1^^^”
其中
^
是一个空格。建议哨兵帮助查看前导/尾随空格
printf(“\n”,str)“删除此字符串中的额外空格”-->为什么
“$5”
”、“
之间没有空格?除非重新移动空间的规则更复杂。最好解释所有规则。@chux该字符串是Y96-64指令集的汇编语言指令。因此,
“$5”
“%r1”
之间不能有空格。但是在一条指令和一个逗号之间可以有任意数量的空格,反之亦然,或者在两条指令之间可以有任意数量的空格。否则你会得到下面这样的答案,到目前为止,它还没有满足你未说明的要求。然后另一个需求出来,然后另一个。。。。