C - 删除空格
问题描述:
我试图从一个从txt文件读取的大型数组中删除空格。 我要处理的数组的strlen()大约是15,000〜22,500。C - 删除空格
这里是我的代码:
#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];
}
}
}
}
这适用于短数组,但对于更大的阵列,我必须使用空格(),如两次摆脱所有的白色空间?我认为算法是正确的,我不知道为什么它适用于短阵列和大型(15,000〜22,500)阵列的毛刺,除非我调用函数两次或三次。
谢谢。
答
对于小型阵列来说它不能正常工作。如果你连续有两个空格,它将会出错。
问题是,当它跳过一个空格时,它从不检查转移的字符是否也是空格。
有几种方法可以解决它。最简单但不是最好的方法是将if
更改为while
。
+1
谢谢,你是正确的... – Paul
答
这是关于可以完成您的任务的最低效方式,但您看到的特定问题是由连续多个空格造成的。想象一下,你在i
循环中扫描,你会看到两个空格中的第一个。因此,您启动j
循环,将数组中的所有内容都移动一个字符靠近开头。你移动的第一个字符是第二个空格,并且你把它放在第一个空格的位置。最后,你完成移动,i
前进到下一个角色 - 这是你移动到第一个空间的第二个空间。现在缓冲区中剩下一个空间,但i
正在指向它,所以它会被留下。
考虑动态内存allocation.malloc这样更大的存储的东西 – minigeek
[删除空间从C中的字符串?](http://stackoverflow.com/questions/1726302/removing-spaces-from-a-string-in- c) – BLUEPIXY