int main() //8th task
{
    int longNum, shortNum, tempNum[5], i;
    printf("Please enter 2 numbers (5 digits and 1 digit, ex: 12345 and 5)\n");
    scanf("%d%d", &longNum, &shortNum);
    for (i = 4; i >= 0; i--)
    {
        if (longNum % 10 != shortNum)
        {
            tempNum[i] = longNum % 10;
            longNum /= 10;
        }
        else tempNum[i] = ; // Delete the digit that == shortNum.
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d", tempNum[i]);
    }
    printf("\n");
    return 0;
}

这个程序检查longNum中是否有shortNum,并假设从longNum中删除这个数字(和他的数组槽)。
我试了几件事都没成功。
我想知道最好的方法是什么(我不知道“其他”应该是什么)。

最佳答案

可以跳过解析循环中的所有shortNum位还需要一个变量来跟踪删除的位数:

int n = 5;
for (i = 4; i >= 0; i--)
{
    int tmp = longNum % 10;
    longNum /= 10;

    if (tmp != shortNum)
        tempNum[--n] = tmp;
}

// here n is number of deleted digits
for (i = n; i < 5; i++)
{
    printf("%d", tempNum[i]);
}

所以,实际上元素并没有从数组中删除它们不会写入该数组也可以反转元素顺序,因此第一个数组元素将是有意义的如果跳过某个元素,tempNum的第一个元素包含垃圾。

10-08 20:06