繁体   English   中英

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),除非我两次或两次调用该函数。

谢谢。

它不适用于小型阵列。 如果您连续有两个空格,则会出错。

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

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

这是完成任务的最低效率方式,但是您看到的特定问题是由连续多个空格引起的。 想象一下您正在i循环中扫描,并且看到两个空格中的第一个。 因此,您开始了j循环,将数组中的所有内容向后移动了一个字符,使其更靠近开头。 您移动的第一个字符是第二个空格,并将其放在第一个空格的位置。 最终,您完成了移动,然后i前进到下一个字符-它超过了您移至第二个空格的位置。 现在您的缓冲区中还有一个空间,但是i指着它过去,因此它将被留在后面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM