Author: Not specified Language: c
Description: Not specified Timestamp: 2013-05-14 17:02:34 +0000
View raw paste Reply
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4.  
  5. typedef struct Item
  6. {
  7.         char c;
  8.         struct Item *next;
  9. }
  10. Item;
  11. int getList(Item **);
  12.  
  13.  
  14. void putList(const char *, Item *);
  15.  
  16. Item *deleteList(Item *);
  17.  
  18. Item *newString(Item *);
  19.  
  20. Item *delSpace(Item *);
  21.  
  22. Item *DelLetters(Item *p) ;
  23.  
  24. Item *delWord(Item *);
  25.  
  26.  
  27. int getList(Item **pptr)
  28. {
  29.         char buf[21], *str;
  30.         Item head = {'*', NULL};
  31.                 Item *last = &head;
  32.         int n, rc = 1;
  33.  
  34.         do{
  35.                 n = scanf("%20[^\n]", buf);
  36.                 if(n < 0){
  37.                         deleteList(head.next);
  38.                         head.next = NULL;
  39.                         rc = 0;
  40.                         continue;
  41.                 }
  42.                 if(n > 0){
  43.                         for(str = buf; *str != '\0'; ++str){
  44.                                 last->next = (Item *)malloc(sizeof(Item));
  45.                                 last = last->next;
  46.                                 last->c = *str;
  47.                         }
  48.                         last->next = NULL;
  49.                 }
  50.                 else
  51.                         scanf("%*c");
  52.         } while(n > 0);
  53.         *pptr = head.next;
  54.         return rc;
  55. }
  56.  
  57. void putList(const char *msg, Item *ptr)
  58. {
  59. printf("%s: \"", msg);
  60. for(; ptr != NULL; ptr = ptr->next)
  61. printf("%c", ptr->c);//?????? ? ???? ??????.
  62. printf("\"\n");
  63. }
  64.  
  65.  
  66. Item *deleteList(Item *ptr)
  67. {
  68. Item *tmp = NULL;
  69. while(ptr != NULL){
  70. tmp = ptr;
  71. ptr = ptr->next;
  72. free(tmp);
  73. }
  74. return ptr;
  75. }
  76.  
  77.  
  78. Item *newString(Item *p)
  79. {
  80.         Item head = {'*', p};
  81.         Item *cur = &head, *prev = &head;
  82.         int fl = 0;
  83.  
  84.        
  85.         while(cur && (cur->next = delSpace(cur->next)))
  86.                 {
  87.                
  88.                
  89.           cur = DelLetters(cur->next);  //???????? ? ???? ????? ????-?? ?? ???????
  90.           prev = cur;                                                                                  
  91.                        
  92.         if(cur)
  93.                         {
  94.                                 cur->c = ' ';
  95.                         }
  96.                
  97.          fl = !fl;
  98.         }
  99.        
  100.         if(prev->next)
  101.                 {
  102.                 free(prev->next);
  103.                 prev->next = NULL;
  104.         }
  105.         return head.next;
  106. }
  107.  
  108. Item *delSpace(Item *p)
  109. {
  110.         Item *tmp;
  111.         while(p && (p->c == ' ' || p->c == '\t')){
  112.                 tmp = p;
  113.                 p = p->next;
  114.                 free(tmp);
  115.         }
  116.         return p;
  117. }
  118.  
  119.  
  120. Item *DelLetters(Item *p)
  121. {
  122.         Item *tmp;
  123.         while(p->next && p->next->c != ' ' && p->next->c != '\t' && p->next !=NULL)// ????? ???????? ???????? ??????? ???
  124.                 {
  125.                         tmp=p;
  126.                         p = p->next;
  127.                         free(tmp);
  128.                 }
  129.         return p;
  130. }
  131.  
  132.  
  133. Item *delWord(Item *p)
  134. {
  135.         Item *tmp;
  136.         while(p && p->c != ' ' && p->c != '\t'){
  137.                 tmp = p;
  138.                 p = p->next;
  139.                 free(tmp);
  140.         }
  141.         return p;
  142. }
  143.  
  144. int main()
  145. {
  146. Item *ptr = NULL;
  147. while(puts("enter string"), getList(&ptr)){
  148. putList("Entered string", ptr);
  149. ptr = newString(ptr);
  150. putList("Result string", ptr);
  151. ptr = deleteList(ptr);
  152. }
  153. return 0;
  154. }
  155.  
View raw paste Reply