C - 删除空格

C - Removing White spaces

我正在尝试从从 txt 文件读取的大型数组中删除空格。 我要处理的数组的 strlen() 大约是 15,000~22,500。

这是我的代码:

#include <stdio.h>
#include <ctype.h>

void whiteSpace(char str[]){
    int i, j;
    for (i = 0; str[i] != 0; i ++){
        if (isspace(str[i])){
            for(j = i; str[j] != 0; j ++){
                str[j] = str[j + 1];
            }
        }
    }
}

这适用于短数组,但对于较大的数组,我必须使用两次 whiteSpace() 来去除所有的空格?

我认为算法是正确的,我不知道为什么它适用于短数组和较大(15,000~22,500)数组的故障,除非我调用该函数两次或三次。

谢谢。

它不适用于小型阵列。如果连续出现两个白色的space就会报错

问题是当它跳过一个白色 space 时,它从不检查移位的字符是否也是白色 space。

有几种方法可以修复它。最简单但不是最好的方法是将 if 更改为 while.

这是您完成任务的效率最低的方法,但您遇到的具体问题是由连续多个 space 引起的。想象一下,您正在 i 循环中扫描,您看到了两个 space 中的第一个。因此,您开始 j 循环,将数组中后面的所有内容移动一个字符,使其更靠近开头。你移动的第一个字符是第二个 space,你把它放在第一个 space 所在的位置。最终,您完成了移动,并且 i 前进到下一个字符 —— 超过第二个 space,您移动到第一个 space 所在的位置。现在您的缓冲区中还剩下一个 space,但是 i 指向它,所以它会被留在后面。