Удаление элемента из массива строк - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не получается как-то удалить определенную запись. Код ниже. Мб кто-то знает как
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. int i,j;
  6. struct prices
  7. {
  8. char name[80];
  9. char country[80];
  10. int price;
  11. char del[80];
  12. };
  13. //*Ввод Элементов*//
  14. void input(struct prices m[],int n)
  15. {
  16. for(i=0;i<n;i++)
  17. {
  18. fflush(stdin);
  19. puts("Enter name:");
  20. gets(m[i].name);
  21. puts("Enter country:");
  22. gets(m[i].country);
  23. printf("Enter price:\n");
  24. scanf("%d",&m[i].price);
  25. fflush(stdin);
  26. }
  27. }
  28. //*Вывод Элементов*//
  29. void output(struct prices m[],int n)
  30. {
  31. for(i=0;i<n;i++)
  32. {
  33. printf(" --- Name: %s\n",m[i].name);
  34. printf(" --- Country: %s\n",m[i].country);
  35. printf(" --- Price: %d\n\n",m[i].price);
  36. }
  37. }
  38. int main()
  39. {
  40. struct prices m[10],b[10];
  41. int n;
  42. printf("Enter size of array: ");
  43. scanf("%d",&n);
  44. input(m,n);
  45. system("cls");
  46. output(m,n);
  47.  
  48. printf("\n\n***Delete element from structure***\n\n");
  49. puts("Enter element:");
  50. gets(m[i].del);
  51. for(i=0; i<n; i++)
  52. {
  53. if (strcmp(m[i].del,m[i].name)!=0)
  54. {
  55. strcpy(b[i].name,m[i].name);
  56. strcpy(b[i].country,m[i].country);
  57. b[i].price=m[i].price;
  58. }
  59. n--;
  60. }
  61. for(i=0;i<n;i++)
  62. {
  63. printf(" --- Name: %s\n",m[i].name);
  64. printf(" --- Country: %s\n",m[i].country);
  65. printf(" --- Price: %d\n\n",m[i].price);
  66. }
  67. return 0;
  68. }

Решение задачи: «Удаление элемента из массива строк»

textual
Листинг программы
  1. j=0;
  2. for(i=0; i<n; i++)
  3. {
  4.  if (strcmp(del,m[i].name)!=0)
  5.      {
  6.        strcpy(b[j].name,m[i].name);
  7.        strcpy(b[j].country,m[i].country);
  8.        b[j].price=m[i].price;
  9.        j++;
  10.      }
  11.  }
  12.  
  13. for(i=0;i<j;i++)
  14.     {
  15.       printf(" --- Name: %s\n",b[i].name);
  16.       printf(" --- Country: %s\n",b[i].country);
  17.       printf(" --- Price: %d\n\n",b[i].price);
  18.     }

Объяснение кода листинга программы

  1. В начале программы объявляются две переменные: j и i, которые будут использоваться в циклах. Переменная j инициализируется значением 0, а переменная i не инициализируется.
  2. Затем идет цикл for, который выполняется n раз, где n - это количество элементов в массиве m. В каждой итерации цикла происходит проверка: если значение m[i].name не равно del (то есть, не равно строке, которую мы хотим удалить), то выполняется следующий блок кода.
  3. Внутри блока кода происходит следующее:
    • Значение m[i].name копируется в элемент массива b с индексом j.
    • Значение m[i].country копируется в элемент массива b с индексом j.
    • Значение m[i].price присваивается элементу массива b с индексом j.
    • Индекс j увеличивается на 1.
  4. После завершения первого цикла, идет второй цикл for, который выполняется j раз (количество элементов в массиве b). В каждой итерации цикла выводятся значения элементов массива b.
  5. Значения, которые выводятся, это:
    • b[i].name (название)
    • b[i].country (страна)
    • b[i].price (цена)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы