c - 从c中的字符串中删除空格

标签 c string

我知道这是一个以前被问过很多次的问题,但我不是在寻求解决方案本身,而是想知道为什么我的解决方案不起作用。

这是我的解决方案:

void delete_blanks(char *string)
{
    while (*string)
    {
        if (*string == ' ')
            *string = '\0';

        *string++;
    }
    puts(string);
}

程序只是为每个输入打印空白 ("")。
在使用调试器运行时,我看到 *string 最后指向 '\0'。是否可以“就地”进行?

这是在这里找到的原始解决方案:

void RemoveSpaces(char* source)
{
  char* i = source;
  char* j = source;
  while(*j != 0)
  {
    *i = *j++;
    if(*i != ' ')
      i++;
  }
  *i = 0;
}

最佳答案

这是一个很好的就地实现

int main(void) {
    char inStr[] = "a cat is on the moon";

    int end = 0;

    for (int i = 0; i < strlen(inStr); i++) {
        if (inStr[i] != ' ') {
            if (i != end) {
                inStr[end] = inStr[i];
            }
            end++;
        }
    }

    inStr[end] = '\0';

    printf("%s\n", inStr);
}

关于c - 从c中的字符串中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642366/

相关文章:

c - 当我为 localhost 执行 getaddrinfo 时,我没有收到 127.0.0.1

c++ - 编译我的代码以通过 xcode 在 OSX 中使用 mongodb c 驱动程序

c - 如何(f)在c中同步linux下的目录

sql - 来自反斜杠的 PostgreSQL 语法错误?

python - 在 Python 3 中编码字符串而不使用 unicode\xc2 替换

c++ - 获取两个字符串之间的字符串

c - ARM编程输出数组并malloc清除输入数组?

javascript - 使用 JSON.stringify 将对象转换为字符串 显示空对象

java - 使用递归组合字符串

c - C 声明变量时出错