2
votes

Suppression d'un nombre d'un tableau

J'essaye de supprimer un nombre d'un tableau à une position donnée.

DANS MON CODE: le tableau comporte 5 nombres, 3 6 5 2 4. Je veux supprimer le numéro à la position 2 qui est 5. La sortie après suppression devrait être 3 6 2 4. mais j'obtiens 3 6 2 2 4 une aide?

MON CODE:

#include<stdio.h>
int main(void){
  int n;
  int i;
  int position;
  int a[10];
  printf("Enter how many numbers\n");
  scanf("%d",&n);
  printf("Enter the numbers\n");
  for(i=0;i<n;i++){
    scanf("%d",&a[i]);
  }
  printf("Enter the position of the number you want to delete\n");
  scanf("%d",&position);

  for(i=0;i<n;i++){
    while(i == position){
      a[i] = a[i+1];
      i = i+1;
    }
  }
  printf("Elements after:\n");
  for(i=0;i<n;i++){
    printf("%d ",a[i]);
  }
  return 0;
}

PRODUCTION


1 commentaires

Les while les sorties en boucle après une itération , car i est incrémentée, et donc plus égale à la position . De plus, après avoir supprimé un élément, vous devez décrémenter n , car le nombre d'éléments a été réduit.


3 Réponses :


-1
votes
#include <string.h>
#include <stdio.h>
...
int text[100]=[1,2,3];
int pos=2;
char re[100]="";
int i=0;
int a=0;
for(int i=0;i<sizeof(text)/sizeof(text[0]);i++){
    if(i!=pos+1){
        re[a]=text[i]+'';
        a++;
    }
    i++;
}
...

2 commentaires

C ++ et C sont des langages différents


@BillLynch Oh, je suis désolé, et je change le code maintenant. Merci



2
votes
// To delete a number from the array, we need to shift all of the
// further numbers down one spot. Note that we start the loop at the
// index of the entry we wish to delete.
for(i = position; i < n; i++) { 
  a[i] = a[i+1];
}

// Once we've completed the shift, the array is now smaller.
n = n - 1;

4 commentaires

Qu'en est-il de l'espace pour ce tableau alloué en mémoire? Est-il nécessaire d'utiliser realloc() dans ces circonstances? Ne devrions-nous pas allouer une mémoire de taille réduite?


@black: Vous pourriez. Vous n'êtes pas obligé. Dans la question, le tableau est alloué par pile, vous ne pouvez donc pas utiliser de réallocation pour cela.


Pourriez-vous expliquer un peu plus s'il vous plaît? Que dois-je utiliser dans ce cas?


Vous ne pouvez pas réduire un tableau alloué par pile.



2
votes

Décrémentez la taille de votre tableau n après avoir terminé le décalage et vous pouvez également y parvenir en

 for(i = position; i < n; i++) {
    a[i] = a[i+1];
  }
  
  n--;


0 commentaires