C - 删除空格

时间:2017-03-03 03:46:28

标签: c arrays char whitespace removing-whitespace

我正在尝试从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)阵列的毛刺,除非我将该函数调用两次或三次。

感谢。

2 个答案:

答案 0 :(得分:2)

它对小型数组不起作用。如果连续有两个空格,则会出错。

问题在于,当它跳过一个空格时,它永远不会检查移位的字符是否也是一个空格。

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

答案 1 :(得分:1)

这是关于完成任务的效率最低的方法,但您看到的具体问题是由连续的多个空格引起的。想象一下,你正在i循环中扫描,你会看到两个空格中的第一个。所以你启动j循环,然后在数组中将一切移动到接近开头的一个字符。你移动的第一个字符是第二个空格,你将它放在第一个空格所在的位置。最后,你完成移动,i前进到下一个角色 - 这是你移动到第一个空间所在的第二个空间。现在缓冲区中还剩下一个空格,但是i指向它,所以它会被遗忘。