c - 如何去掉字符串中的空格?

标签 c string

我正在尝试编写一个函数来删除字符串中的空格,我知道我的问题是即使将下一个字符移动到空格所在的位置后,我仍然在其原始位置复制该字符(我重复一个字符两次)。我不太确定如何摆脱那个重复的角色。 (即我有“Hello world.”,但我的函数给了我“Hellowworld.”)

void deblank(char str1[], char str2[])
{
   int i, x;

   for (i = 0; str1[i] != '\0'; i++)
   {
      if (str1[i] == ' ')
      {
         x = i + 1;
         str2[i] = str1[x];
      }

      else
      {
         str2[i] = str1[i];
      }
   }

   str2[i] = '\0';
}

最佳答案

现在,您只有一个索引,i .

你真的想要两个索引,称它们为 ij . i将是您对源字符串的索引。 j将是您在目标字符串中的索引。

您将像现在一样遍历源字符串,递增 i在每次迭代中。当源中有非空格字符时,您会将其复制到目标,并增加目标索引。

当源中有空格时,您不会将其复制到目标或增加目标索引。

通常这看起来像:

size_t j = 0;

for (i=0; input[i]; i++)
    if (input[i] != ' ')
        output[j++] = input[i];
output[j] = '\0';

是的,我会使用类似 input 的东西和 outputsourcedest而不是 str1str2 .后者没有指示您从/复制到哪个。

我还建议使用 isspace来自 <ctype.h>而不是直接与空格字符进行比较,除非你真的只想消除空格字符,但保留其他空白(制表符、回车符、换行符、垂直制表符等)

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

相关文章:

c - 是否有编译器指令来替换常量的一部分

c - 在 C 中反转 "boolean"

java - 如何从SQL中得到一个信息string,int,但是信息必须没有初始化?

string - 如何将字符串转换为 Haskell 中的整数列表

java - 如何将整数包含到另一个变量的名称中

java - 是否可以反转对 String replaceAll 方法的调用?

c - Mips 到 C 的翻译,两个 for 循环

c - 为什么将数组作为参数传递时有一个自由维度?

C - 添加两个单精度浮点正常数,不能得到无穷大的结果

javascript - 匹配字符串中的单词,无论中间是什么