Facebook
From gfgfg, 2 Months ago, written in C.
Embed
Download Paste or View Raw
Hits: 182
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct Locuinta {
  7.  int id;
  8.  char* strada;
  9.  int numar;
  10. };
  11.  
  12. void inserareLocuinta(struct Locuinta** vector, int* dim, struct Locuinta l) {
  13.  struct Locuinta* copie;
  14.  copie = malloc(sizeof(struct Locuinta) * (++(*dim)));
  15.  for (int i = 0; i < (*dim) - 1; i++) {
  16.   copie[i] = (*vector)[i];
  17.  }
  18.  copie[(*dim) - 1] = l;
  19.  if ((*vector) != NULL) {
  20.   free((*vector));
  21.  }
  22.  (*vector) = copie;
  23. }
  24.  
  25. void citesteFisier(const char* nume_fisier, struct Locuinta** vector, int* dim) {
  26.  if (nume_fisier != NULL && strlen(nume_fisier) > 0) {
  27.   FILE* f = fopen&#40;nume_fisier, "r"&#41;;
  28.   if (f != NULL) {
  29.    (*dim) = 0;
  30.    char buffer[100];
  31.    char delimitator[] = ",\n";
  32.    while (fgets(buffer, 100, f) != NULL) {
  33.     char* token;
  34.     token = strtok(buffer, delimitator);
  35.     struct Locuinta locuinta;
  36.     locuinta.id = atoi(token);
  37.     token = strtok(NULL, delimitator);
  38.     locuinta.strada = (char*)malloc(strlen(token) + 1);
  39.     strcpy(locuinta.strada, token);
  40.     token = strtok(NULL, delimitator);
  41.     locuinta.numar = atoi(token);
  42.     inserareLocuinta(vector, dim, locuinta);
  43.    }
  44.   }
  45.   fclose(f);
  46.  }
  47. }
  48.  
  49. void afisareLocuinta(struct Locuinta l) {
  50.  printf("ID: %d\nStrada: %s numarul %d\n", l.id, l.strada, l.numar);
  51. }
  52.  
  53. void afisareVectorLocuinte(struct Locuinta* vector, int dim) {
  54.  for (int i = 0; i < dim; i++)
  55.   afisareLocuinta(vector[i]);
  56. }
  57.  
  58. void stergeLocuinta(struct Locuinta** vector, int* dim, int id) {
  59.  char flag = 0;
  60.  for (int i = 0; i < (*dim); i++) {
  61.   if (((*vector)[i].id) == id){
  62.    flag = 1;
  63.    break;
  64.   }
  65.  }
  66.  if (flag == 1) {//avem o locuinta de sters
  67.   struct Locuinta* copie = (struct Locuinta*)malloc(sizeof(struct Locuinta) * ((*dim) - 1));
  68.   int j = 0;
  69.   for (int i = 0; i < (*dim); i++) {
  70.    if ((*vector)[i].id != id) {
  71.     copie[j++] = (*vector)[i];
  72.    }
  73.   }
  74.   (*dim)--;
  75.   if ((*vector) != NULL) {
  76.    free((*vector));
  77.   }
  78.   (*vector) = copie;
  79.  }
  80. }
  81.  
  82. void main() {
  83.  struct Locuinta* locuinte = NULL;
  84.  int dim = 3;
  85.  citesteFisier("locuinte.txt",&locuinte;,&dim;);
  86.  afisareVectorLocuinte(locuinte, dim);
  87.  
  88.  printf("\n\nUlterior\n\n");
  89.  stergeLocuinta(&locuinte;, &dim;, 22);
  90.  afisareVectorLocuinte(locuinte, dim);
  91.  
  92.  
  93. }