fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct e {
  6. char *name;
  7. int nbr;
  8. }t_elem;
  9.  
  10. typedef struct node {
  11. t_elem data;
  12. struct node *prev;
  13. struct node *next;
  14. }t_node;
  15.  
  16.  
  17. //Une fonction pour remplir la liste, mais pas d'interret pour toi
  18. void add_elem(t_node **list, char *name) {
  19. t_elem e;
  20. t_node *elem;
  21. t_node *ptr_debut;
  22.  
  23. ptr_debut = *list;
  24. e.name = name;
  25. elem = malloc(sizeof(t_node));
  26. elem->data = e;
  27. if (*list == NULL) {
  28. *list = elem;
  29. elem->next = NULL;
  30. elem->prev = NULL;
  31. } else {
  32. while ((*list)->next != NULL) {
  33. *list = (*list)->next;
  34. }
  35. (*list)->next = elem;
  36. elem->prev = *list;
  37. elem->next = NULL;
  38. *list = ptr_debut;
  39. }
  40. }
  41.  
  42. //La fonction pour tester si tout a bien marché
  43. void afficher_list(t_node *l) {
  44. while (l != NULL) {
  45. printf("%s", l->data.name);
  46. l = l->next;
  47. }
  48. }
  49.  
  50.  
  51.  
  52. int nb_elem_a_copier(t_node *l) {
  53. int i = 0;
  54. while (l != NULL) {
  55. ++i;
  56. l = l->next;
  57. }
  58. return i;
  59. }
  60.  
  61.  
  62. //La fonction interessante
  63. void copy_part(t_node *list, t_elem source) {
  64. t_node *ptr_debut = list;
  65.  
  66. //on parcours notre liste
  67. while (list != NULL) {
  68.  
  69. //Si l'element match
  70. if (strcmp(list->data.name, source.name) == 0) {
  71.  
  72.  
  73. //On doit forement enregistrer le nombre d'element
  74. //car plus on va en ajouter, plus la liste va s'agrandir
  75. int nb = nb_elem_a_copier(list);
  76. while (nb != 0) {
  77. add_elem(&ptr_debut, list->data.name);
  78. list = list->next;
  79. nb--;
  80. }
  81. return;
  82. }
  83. list = list->next;
  84. }
  85.  
  86. }
  87.  
  88. int main(void) {
  89.  
  90. t_node *list = NULL;
  91.  
  92. add_elem(&list, "a");
  93. add_elem(&list, "z");
  94. add_elem(&list, "e");
  95. add_elem(&list, "r");
  96. add_elem(&list, "t");
  97. add_elem(&list, "y");
  98.  
  99. afficher_list(list);
  100.  
  101. t_elem e;
  102.  
  103. e.name = "t";
  104.  
  105. copy_part(list, e);
  106.  
  107. printf("\n");
  108.  
  109. afficher_list(list);
  110.  
  111. printf("\n");
  112.  
  113. return EXIT_SUCCESS;
  114. }
Success #stdin #stdout 0s 2380KB
stdin
Standard input is empty
stdout
azerty
azertyty