fork download
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <malloc.h>
  4.  
  5. typedef struct _node {
  6. const char* p;
  7. struct _node* next;
  8. } node;
  9.  
  10. typedef struct {
  11. node* head;
  12. node* tail;
  13. } slist;
  14.  
  15. void slist_init(slist* lst);
  16. int slist_push_front(slist* lst, const char* p);
  17. int slist_push_back(slist* lst, const char* p);
  18. void slist_clear(slist* lst);
  19.  
  20.  
  21. void split_word(slist* lst, char* s){
  22. int h;
  23. char* p;
  24.  
  25. slist_init(lst);
  26.  
  27. while(*s){
  28.  
  29. while(*s && ! isxdigit(*s))
  30. ++s;
  31.  
  32. p = s;
  33. h = 0;
  34. while(isxdigit(*p)){
  35. if(! h)
  36. h = (*p >= '8');
  37. ++p;
  38. }
  39.  
  40. if(*s){
  41. if(*p != '\0')
  42. *p++ = '\0';
  43.  
  44. if(h)
  45. slist_push_back(lst, s);
  46. else
  47. slist_push_front(lst, s);
  48. }
  49. s = p;
  50. }
  51. }
  52.  
  53.  
  54. int main(void){
  55. node* it;
  56. slist deq;
  57.  
  58. char s[128] = "AB 12 FF 8E AC 78 9A 77 75 DC 10 45 67 CF 33";
  59. /*
  60. printf("enter str: ");
  61. fgets(s, sizeof(s), stdin);
  62. fflush(stdin);
  63. */
  64. split_word(&deq, s);
  65.  
  66. //вывести
  67. for(it = deq.head; it != NULL; it = it->next)
  68. printf("%s ", it->p);
  69.  
  70. slist_clear(&deq);
  71. return 0;
  72. }
  73.  
  74. //инициализация списка
  75. void slist_init(slist* lst){
  76. lst->head = lst->tail = NULL;
  77. }
  78.  
  79. //вставка элемента в голову списка
  80. int slist_push_front(slist* lst, const char* p){
  81. node* n = (node*)malloc(sizeof(node));
  82. if(n != NULL){
  83. n->next = NULL;
  84. n->p = p;
  85.  
  86. if(lst->head == NULL)
  87. lst->head = lst->tail = n;
  88. else {
  89. n->next = lst->head;
  90. lst->head = n;
  91. }
  92. }
  93. return (n != NULL);
  94. }
  95.  
  96.  
  97. //вставка элемента в конец списка
  98. int slist_push_back(slist* lst, const char* p){
  99. node* n = (node*)malloc(sizeof(node));
  100. if(n != NULL){
  101. n->next = NULL;
  102. n->p = p;
  103.  
  104. if(lst->head == NULL)
  105. lst->head = lst->tail = n;
  106. else {
  107. lst->tail->next = n;
  108. lst->tail = n;
  109. }
  110. }
  111. return (n != NULL);
  112. }
  113.  
  114. //удаление списка
  115. void slist_clear(slist* lst){
  116. node* t;
  117. while(lst->head != NULL){
  118. t= lst->head;
  119. lst->head = lst->head->next;
  120. free(t);
  121. }
  122. lst->tail = NULL;
  123. }
  124.  
Success #stdin #stdout 0s 2140KB
stdin
Standard input is empty
stdout
33 67 45 10 75 77 12 AB FF 8E AC 78 9A DC CF