2015-10-09 43 views
0

我有像一些值的数组:如何从C中的数组中删除空值?

char s[] = {" ","a","b","c"," "}; 

如何删除这些空值?

描述(从意见收集):

我有一个数组,我从一个函数得到,当我印有sprintf返回我这样的字符串:" foo"两个坯料或依赖,是因为我替换一些字符与空白空间(' ')字符,但是当我在另一个函数中使用变量,这些空格给我的错误,因为空值,那么我需要做一个“拆分”像java一样,我该怎么做?

+1

这个声明/定义是错误的,启用编译警告,你的编译器告诉你什么?也请澄清你的意思*删除*?这不是c程序员会想的方式!所以请解释你为什么要这样做来提供一个解决方案。请注意,“删除*”的值通常是不必要的工作。 –

+0

我有一个数组,我得到了一个函数,当我用sprintf打印返回给我一个这样的字符串:“富”两个空白或依赖,这是因为我用blankspace('')字符替换某些字符,但是当我在另一个函数中使用变量,这些空间给我的错误,因为空值,那么我需要做一个像Java那样的“分裂”,我该怎么做? – maudev

+0

您可以创建另一个字符串数组,并只保存有效的字符串。如果字符串为空,则不要复制到较新的阵列。 – Pawan

回答

-1

不确定“删除它们”,但可以计算除“空格”之外的所有内容,并创建一个具有该大小的数组并传输所有“非空格”。

也许这样的事情?这可能不是最好的答案,这仅仅是为了演示的目的。

我不知道你的char数组中是否有行尾字符......所以这是另一种方式。

#include <stdio.h> 

int count (char s[5]){ 
    int count = 0, i; 
    for(i=0; i<5;i++){ 
     if(s[i]!=' ')count++; 
    } 
    return count; 
} 

void load(int size, char s[size], char s1[5]){ 
    int i, j=0; 
    for(i=0; i<5; i++){ 
    if(s1[i]!=' '){s[j]=s1[i]; 
    j++;} 
    } 
} 

int main(){ 

char s[5] = {' ','a','b','c',' '}; 
int size = count(s); 
char newS[size]; 
load(size, newS, s); 
puts(newS); 

return 1;} 
+0

好吧,这工作正常,但大小保持与其他数组相同,我需要将它传递给新的数组有效值的新大小,因此我说我可以'删除'这些值 – maudev

+0

@ user3295036该函数计算字符串中的有效char值...然后返回该值以创建一个具有该大小的数组,因此,不会有新的数组具有不同的大小(在上面的情况中,它将是大小3而不是大小5)。 – LearningCODE