c - 如何用 C 字符串中的单个空格替换空格?

标签 c

我正在尝试编写一个函数,将所有空格(即多个空格、换行符、制表符或上述任何连续序列)转换为单个空格。

例如,以下输入:

"example\tinput\tstring"
"example\ninput\nstring"
"example  \tinput \n string"

都会产生相同的输出: “示例输入字符串”

我目前有以下代码基于 Stack Overflow 上的类似问题(https://stackoverflow.com/a/1217750/6652030,第二个答案)。它可以正确处理多个空格的序列,但不会按预期用空格替换制表符和换行符。如果我传递前两个示例输入,我得到的字符串是“exampleinputstring”。对我哪里出错有任何想法吗?

void removeExtraWhitespace(char *src, char *dst) {
  for (; *src; ++dst, ++src) {
    *dst = *src;
    if (*src == '\n' || *src == '\t') {
      *src = ' ';
    }

    else if (isspace(*src)) {
      while (!isspace(*(src + 1))) {
        ++src;
      }
    }
  }

  *dst = '\0';
}

最佳答案

您可以对您的代码进行如下修改:

void removeExtraWhitespace(char *dst, const char *src) {
  for(; *src; ++dst, ++src) {
    if (isspace(*src)) {
      *dst = ' ';
      while (isspace(*(src + 1))) {
        ++src;
      }
    } else {
      *dst = *src;
    }
  }
  *dst = '\0';
}

例如,

char dst[50];
$ removeExtraWhitespace(dst, "\t\t\texample\t\t\n    input\nstring\n\n   ");
$ printf("%s\n", dst);
 example input string 

关于c - 如何用 C 字符串中的单个空格替换空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42966864/

相关文章:

c - 用C语言将原始二进制文件写入文件

c++ - ftell 非常大文件的错误

c++ - 如何在全局范围内初始化结构/类

c - 没有得到所有结果来移动我的阵列

C 函数类似于 du -a?

c - 如何使用fork获取新创建的子进程的进程名称和进程id pid?

c - 如何创建一棵树,在其中找到正确的节点来添加子节点?

c - 一种计算堆栈大小的方法

转换结构指针

c - 用于循环速度 c 的英特尔编译器