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
指向它,所以它会被留在后面。
我正在尝试从从 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
指向它,所以它会被留在后面。