注册 登录
编程论坛 C语言论坛

求助各位大佬:删除n个数中的0元素

Emmaer123 发布于 2019-10-14 22:17, 1647 次点击
#include <stdio.h>
int main()
{
    int i,n,j,flag,count=0,MAX=0;
    char a[1000]={0};char b[1000]={0};
    scanf("%d",&n);
    for (i=0;i<n;i++)   //依次输入数组   
     {    scanf("%s",&a[i]);
          if(a[i]==0) MAX++;  //记录这串数中所有0的个数
          b[i]=a[i];
     }
   
    for(i=n-1;i>=0;i--) //倒着从这串数组开始,例如从最后一个a[i-1]开始,将它的下标改变 i-1减去它的前面所有0的个数即count,为了不覆盖掉前面 还没改下标的元素,因此赋给了b数组
    {
        if(a[i]!=0)
        {
            for(j=0;j<i-1;j++)
            if(a[i]==0)        { count++; }
        }
        b[i-count]=a[i];
        count=0;   //count重置归零,因为每个元素前的0元素个数count不同
    }
    for(i=0;i<n-MAX;i++)
    {
        printf("%d",b[i]);
    }
    return 0;   
}
   
    请教各位大神,为什么编译不出来?感谢路过的大神花时间进贴指教


[此贴子已经被作者于2019-10-15 16:47编辑过]

9 回复
#2
自学的数学2019-10-14 22:34
因为  x=0; 中 x没有定义。
#3
Emmaer1232019-10-14 23:06
回复 2楼 自学的数学
sorry,这个错误实在太低级了哈哈,但我改了以后还是编译不了
#4
bcbbcclbbc2019-10-15 06:14
表示看不懂第二个for语句,理解不了程序的逻辑
for(i=n-1;n>=0;i--)

判断语句“n>0”而在之后的循环体中,n没有任何变化,也没有break语句,怎么退出循环?
#5
Emmaer1232019-10-15 16:51
回复 4楼 bcbbcclbbc
抱歉我看了下n应该改成i,可是改过之后还是错了
#6
Emmaer1232019-10-15 19:28
#include <stdio.h>
int main()
{
    int i,n,j,flag,count=0,MAX=0;
    char a[1000]={0};char b[1000]={0};
    scanf("%d",&n);
   
    for (i=0;i<n;i++)   //依次输入数组   
     {    scanf("%d",&a[i]);
          if(a[i]==0) MAX++;  //记录这串数中所有0的个数
          b[i]=a[i];
     }
    for(i=n-1;i>=0;i--) //倒着从这串数组开始,例如从最后一个a[i-1]开始,将它的下标改变 i-1减去它的前面所有0的个数即count,为了不覆盖掉前面 还没改下标的元素,因此赋给了b数组
    {
        if(a[i]!=0)
        {         // 7 8 0 9 3 4  0 5          7 8 9 3 4 5
                  //b[5]=a[7]    b[4]=a[5] b[3]=a[4]   b[2]=a[3]
            for(j=0;j<i-1;j++)   
            {
               if(a[j]==0)     count++;
            }
        
           b[i-count]=a[i];printf("%d",b[i]);
           count=0;j=0;   //count重置归零,因为每个元素前的0元素个数count不同
           continue;
       }
    }
    printf("\n");
    for(i=0;i<n-MAX;i++)  printf("%d",b[i]);  
}
#7
bcbbcclbbc2019-10-16 02:30
回复 6楼 Emmaer123
懂了,简化了一下第二个for循环
count=MAX;
    for(i=n-1;i>=0;i--)
    {
        if(a[i]==0) count--;   
        else b[i-count]=a[i];
    }

char a[1000]={0};char b[1000]={0};
   

这个定义字符数组,首先字符的'0'与整数的0是不相等的,如果你输入的都是数字则应该定义为int类型。

你说的错了是指什么,编译有问题,还是结果不对,这个要说清楚,不方便可以粘贴相应的错误或截图

[此贴子已经被作者于2019-10-16 02:45编辑过]

#8
吹水佬2019-10-16 10:42
看过程不象是删除数中的0,是删除字符数组中元素为'0'的元素?
#9
bcbbcclbbc2019-10-17 01:30
回复 8楼 吹水佬
楼主的程序有点前后矛盾,输入输出的格式符都是整型,但是定义的是字符数组,这样能正常读入数据吗?
#10
纯蓝之刃2019-10-17 18:30
#include <stdio.h>
int main()
{
    int i,n,j,count=0,MAX=0;
    char a[1000]={0};
    char b[1000]={0};
    scanf("%d",&n);
    for (i=0;i<n;i++)   //依次输入数组
     {    scanf("%d",&a[i]);
          if(a[i]==0) MAX++;  //记录这串数中所有0的个数
     }

     j=0;
    for(i=n-1;i>=0;i--)
    {
        if(a[i]!=0)
        {
            b[j]=a[i];
            j++;
        }
    }
    for(i=0;i<n-MAX;i++)
    {
        printf("%d\t",b[i]);
    }
    return 0;
}
你scanf("%s",&a[i]);;输入中用的是%s所以输入的会被解析成ASCII码。后面的也比较乱,可以简化一下,你试试我这个

[此贴子已经被作者于2019-10-17 18:32编辑过]

1