我正在尝试从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)阵列的毛刺,除非我将该函数调用两次或三次。
感谢。
答案 0 :(得分:2)
它对小型数组不起作用。如果连续有两个空格,则会出错。
问题在于,当它跳过一个空格时,它永远不会检查移位的字符是否也是一个空格。
有几种方法可以解决它。最简单但不是最好的是将if
更改为while
。
答案 1 :(得分:1)
这是关于完成任务的效率最低的方法,但您看到的具体问题是由连续的多个空格引起的。想象一下,你正在i
循环中扫描,你会看到两个空格中的第一个。所以你启动j
循环,然后在数组中将一切移动到接近开头的一个字符。你移动的第一个字符是第二个空格,你将它放在第一个空格所在的位置。最后,你完成移动,i
前进到下一个角色 - 这是你移动到第一个空间所在的第二个空间。现在缓冲区中还剩下一个空格,但是i
指向它,所以它会被遗忘。