从数组中删除10的函数将10替换为0。将所有剩余元素移位到数组的开头

时间:2017-07-19 17:40:46

标签: c arrays pointers nested-loops

编写一个函数,从n个整数数组中删除所有10个。其余的元素应该根据需要向左移动到数组的开头,并且数组末尾的“空”空格应该设置为0,到目前为止,当我们运行sput.h测试时,代码运行不正常安全带

void without_tens(int *arr, int n) {
    int i = 0; 
    for (int j = 0; arr[j] % 10 == 0 && j < n; j++) {
        arr[j] = 0;
        i = j; 
        while (i < n && arr[i] % 10 != 0 && arr[i + 1] != 0) {
            arr[i + 1] = arr[i];
            break;
        }
    } 
}

1 个答案:

答案 0 :(得分:1)

有几种方式......就是其中之一。

void remove_tens(int *arr, int len )
{
    int i = 0, n = 0;

    // Skip numbers 10 from de copy 
    for( i = 0 ; i < len ; i++ )
        arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;

    // Fill de array with 0 
    for( i = n ; i < len ; i++ )
        arr[i] = 0;
}

第一个:不要复制10个号码,跳过它们

我将使用n作为正确复制到数组的每个非10数字的索引。

// Skip numbers 10 from de copy 
for( i = 0 ; i < len ; i++ )
     arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;

那意味着...如果当前元素不同于10(arr[i] != 10),则将该元素(arr[i])复制到结果数组并移动一个(arr[n++] = arr[i]),如果没有,请不要移动,也不要复制任何内容(arr[n] = 0)。

第二个:用0填充空格

从n(for( i = n...)开始,填写0(arr[i] = 0;)。

代码和Coliru

上的示例
void remove_tens(int *arr, int len )
{
    int i = 0, n = 0;

    // Skip numbers 10 from de copy 
    for( i = 0 ; i < len ; i++ )
        arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;

    // Fill the array with 0 
    for( i = n ; i < len ; i++ )
        arr[i] = 0;
}


int main ()
{
    int numbers[5];
    int i = 0;

    numbers[0] = 4;
    numbers[1] = 5;
    numbers[2] = 10;
    numbers[3] = 1;
    numbers[4] = 10;

    remove_tens(numbers, 5);

    // Printing the result    
    for( i = 0 ; i < 5 ; i++ )
        printf("%d", numbers[i] );

    return 0;
}