【问题标题】:Removing extra spaces from a sentence having special characters in C从C中具有特殊字符的句子中删除多余的空格
【发布时间】:2020-08-07 09:10:54
【问题描述】:

我有一句话:

    irmovq   $5    ,     %r1

我想把它转换成:

irmovq $5, %r1

也就是说,我想从这个字符串中删除多余的空格。 实现这种修剪功能的最佳方法是什么?

【问题讨论】:

  • "从这个字符串中删除多余的空格" --> 为什么"$5""," 之间没有空格?除非您重新移动空间的规则更复杂。最好解释所有规则。
  • @chux-ReinstateMonica 该字符串是Y96-64指令集的汇编语言指令。所以"$5""%r1" 之间不能有空格。但是指令和逗号之间可以有任意数量的空格,反之亦然,或者两条指令之间可以有任意数量的空格。
  • Srijan,好的,如果assembly language instruction of Y96-64 instruction set 是问题的要求,请在此处列出所有此类要求。否则你会得到一个像下面这样的答案,直到现在还没有你未说明的要求。然后另一个要求出来了,然后另一个,....

标签: c string pointers c-strings


【解决方案1】:
#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;
}

【讨论】:

  • 逗号前有一个空格
  • 这里也更习惯使用str 作为指针并在循环中前进,但这是一个不错的第一步。
  • 我怀疑remove_extra_spaces() 可能会留下一个尾随空格。试试"^^irmovq^^$5^^,^^%r1^^",其中^ 是一个空格。
  • 建议哨兵帮助查看前导/尾随空格printf("&lt;%s&gt;\n",str);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2015-08-23
  • 2022-07-01
  • 2011-08-05
相关资源
最近更新 更多