Удаление элемента из массива строк - C (СИ)
Формулировка задачи:
Не получается как-то удалить определенную запись. Код ниже. Мб кто-то знает как
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- int i,j;
- struct prices
- {
- char name[80];
- char country[80];
- int price;
- char del[80];
- };
- //*Ввод Элементов*//
- void input(struct prices m[],int n)
- {
- for(i=0;i<n;i++)
- {
- fflush(stdin);
- puts("Enter name:");
- gets(m[i].name);
- puts("Enter country:");
- gets(m[i].country);
- printf("Enter price:\n");
- scanf("%d",&m[i].price);
- fflush(stdin);
- }
- }
- //*Вывод Элементов*//
- void output(struct prices m[],int n)
- {
- for(i=0;i<n;i++)
- {
- printf(" --- Name: %s\n",m[i].name);
- printf(" --- Country: %s\n",m[i].country);
- printf(" --- Price: %d\n\n",m[i].price);
- }
- }
- int main()
- {
- struct prices m[10],b[10];
- int n;
- printf("Enter size of array: ");
- scanf("%d",&n);
- input(m,n);
- system("cls");
- output(m,n);
- printf("\n\n***Delete element from structure***\n\n");
- puts("Enter element:");
- gets(m[i].del);
- for(i=0; i<n; i++)
- {
- if (strcmp(m[i].del,m[i].name)!=0)
- {
- strcpy(b[i].name,m[i].name);
- strcpy(b[i].country,m[i].country);
- b[i].price=m[i].price;
- }
- n--;
- }
- for(i=0;i<n;i++)
- {
- printf(" --- Name: %s\n",m[i].name);
- printf(" --- Country: %s\n",m[i].country);
- printf(" --- Price: %d\n\n",m[i].price);
- }
- return 0;
- }
Решение задачи: «Удаление элемента из массива строк»
textual
Листинг программы
- j=0;
- for(i=0; i<n; i++)
- {
- if (strcmp(del,m[i].name)!=0)
- {
- strcpy(b[j].name,m[i].name);
- strcpy(b[j].country,m[i].country);
- b[j].price=m[i].price;
- j++;
- }
- }
- for(i=0;i<j;i++)
- {
- printf(" --- Name: %s\n",b[i].name);
- printf(" --- Country: %s\n",b[i].country);
- printf(" --- Price: %d\n\n",b[i].price);
- }
Объяснение кода листинга программы
- В начале программы объявляются две переменные:
j
иi
, которые будут использоваться в циклах. Переменнаяj
инициализируется значением 0, а переменнаяi
не инициализируется. - Затем идет цикл
for
, который выполняетсяn
раз, гдеn
- это количество элементов в массивеm
. В каждой итерации цикла происходит проверка: если значениеm[i].name
не равноdel
(то есть, не равно строке, которую мы хотим удалить), то выполняется следующий блок кода. - Внутри блока кода происходит следующее:
- Значение
m[i].name
копируется в элемент массиваb
с индексомj
. - Значение
m[i].country
копируется в элемент массиваb
с индексомj
. - Значение
m[i].price
присваивается элементу массиваb
с индексомj
. - Индекс
j
увеличивается на 1.
- Значение
- После завершения первого цикла, идет второй цикл
for
, который выполняетсяj
раз (количество элементов в массивеb
). В каждой итерации цикла выводятся значения элементов массиваb
. - Значения, которые выводятся, это:
b[i].name
(название)b[i].country
(страна)b[i].price
(цена)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д