2015-11-24 34 views
-3

你好,我正在嘗試約2小時來創建一個程序,它將從c中的dinamyc分配數組(有malloc)中刪除偶數。有人可以幫助我一些提示或創建碼。從c中刪除偶數編號

p.s.這是我的第一個主題,所以請隨時給我一些關於如何正確發佈問題的提示。

+2

到目前爲止你有什麼?幫助意味着糾正你的錯誤,以便你可以向他們學習。爲別人做的工作對他們沒有幫助 – Alex

+0

@AnoopKanyan這是C++不是C – Alex

+2

顯示你的代碼。 –

回答

0

假設您已經動態分配了n個元素的數組並對其進行了初始化。

在這種情況下,消除甚至值的元素可以看看下面的方式

size_t remove_even(int *a, size_t n) 
{ 
    size_t m = 0; 

    for (size_t i = 0; i < n; i++) 
    { 
     if (a[i] % 2 != 0) 
     { 
      if (i != m) a[m] = a[i]; 
      ++m; 
     } 
    } 

    return m; 
} 

它可以被稱爲以下方式

size_t m = remove_even(p, n); 

for (size_t i = 0; i < m; i++) printf("%d ", a[i]); 
printf("\n"); 

其中p爲指針,以你的動態分配功能n個元素的數組。

該函數實際上不會刪除任何內容。它只是將奇數元素移動到數組的開頭。

然後,您可以使用標準C函數realloc物理刪除已刪除的元素。

例如

int *tmp = realloc(p, m * sizeof(int)); 

if (tmp != NULL) p = tmp; 

這裏是一個示範項目

#include <stdlib.h> 
#include <stdio.h> 

size_t remove_even(int a[], size_t n) 
{ 
    size_t m = 0; 

    for (size_t i = 0; i < n; i++) 
    { 
     if (a[i] % 2 != 0) 
     { 
      if (i != m) a[m] = a[i]; 
      ++m; 
     } 
    } 

    return m; 
} 

#define N 10 

int main(void) 
{ 
    int *a = malloc(N * sizeof(int)); 

    for (size_t i = 0; i < N; i++) a[i] = i; 

    for (size_t i = 0; i < N; i++) printf("%d ", a[i]); 
    printf("\n"); 

    size_t m = remove_even(a, N); 

    int *tmp = realloc(a, m * sizeof(int)); 

    if (tmp != NULL) a = tmp; 

    for (size_t i = 0; i < m; i++) printf("%d ", a[i]); 
    printf("\n"); 

    free(a); 
} 

它的輸出是

0 1 2 3 4 5 6 7 8 9 
1 3 5 7 9 
0

有一些事情你需要檢查你嘗試代碼的東西之前,但我看到沒有您使用的代碼。

SO不是教程網站,所以這意味着你應該向我們展示一些實際編譯的代碼,並在這裏詢問代碼是否存在問題。

任何晃到比,此代碼應該給你如何檢查是否一個數是oddeven一個想法:

#include<stdio.h> 
#include<stdlib.h> 

int main(void){ 
    int n; 

    printf("Enter an integer:> "); 
    if((scanf("%d", &n)) != 1){ 
     printf("Error, Fix it!\n"); 
     exit(1); 
    } 

    if (n%2 == 0){ 
     printf("Even\n"); 
    }else{ 
     printf("Odd\n"); 
    } 

    return 0; 
} 

整個故事在這裏是不是如果數組裏面的數字是odd檢查或even,即將找到一種方法來檢查數字是否爲oddeven,然後才應該檢查該數組內是否有oddeven數字。我希望你明白我的觀點。