Usuwanie elementu tablicy w C
Napisałem następujący program, aby usunąć element tablicy wprowadzony przez użytkownika.
#include <stdio.h>
#include <conio.h>void main() {
int j, i, a[100], n, key, l;
clrscr();
printf("Enter the number of elements:");
scanf("%d", &n);
printf("\nEnter the elements:\n");
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("\nEnter the element to delete:");
scanf("%d", &key);
l = n;//Length of the array
for (i = 0; i < l; i++) {
if (a[i] == key) {
for (j = i; j < l; j++)
a[j] = a[j + 1];
l--;//Decreasing the length of the array
}
} printf("\nThe new array is \n");
for (i = 0; i < l; i++)
printf("%d ", a[i]);
getch();
}
Działa dobrze dla większości danych wejściowych, ale gdy dane wejściowe wyglądają mniej więcej tak:
1 2 2 3 5(tutaj
2jest powtarzane sekwencyjnie), a usuwany element to
2, exit-
1 2 3 5.
Jak mogę zmienić program tak, aby wszystkie wystąpienia wstawionego elementu zostały usunięte?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
7 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Weźmy Twój przykład i postępuj zgodnie z kodem linia po linii
Anonimowy użytkownik
Potwierdzenie od:
Jeśli twój indeks i zapętla tablicę, będziesz chciał jeszcze raz zapętlić ten element:
Na przykład, aby usunąć wszystkie elementy „3” z tablicy o długości „l”:
Jeśli ty
naprawdę
dbać o kolejność elementów w tablicy, najbardziej efektywne jest użycie memmove niż ręczne przesuwanie elementów. Jest przeznaczony do użytku w przypadku nakładania się pamięci źródłowej i docelowej.
memmove(a + i, a + i + 1, sizeof(a[0]) * (l - i - 1));
Anonimowy użytkownik
Potwierdzenie od:
for(i=0;i<l;i++)
{
while (i<l && a[i]==key)
{
for(j=i;j<l;j++)
a[j]=a[j+1];
l--;//Decreasing the length of the array
}
}
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Oto zmodyfikowana wersja:
Wpisy: