Author: Not specified Language: c
Description: Not specified Timestamp: 2013-05-21 18:10:45 +0000
View raw paste Reply
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. struct Item
  5. {
  6.     char c;
  7.     struct Item *next;
  8. };
  9. void printlist (struct Item *p)
  10. {
  11.         for (; p; p=p->next)
  12.       printf("%c",p->c);
  13. }
  14. struct Item *deletespaces(struct Item *first)
  15. {
  16.     struct Item *ptr=first;
  17.  
  18.     while(first->next!=NULL && (first->c==' ' || first->c=='\t'))
  19.     {
  20.         ptr=first;
  21.         first=first->next;
  22.         free(ptr);
  23.     }
  24.     return first;
  25. }
  26. void deletelist(struct Item *first)
  27. {
  28.     struct Item *tmp=NULL;
  29.     while(first)
  30.     {
  31.         tmp=first;
  32.         first=first->next;
  33.         free(tmp);
  34.     }
  35.     first=NULL;
  36. }
  37. int Delete(struct Item *head, struct Item *x)
  38. {
  39.     struct Item *p=head;
  40.     while (p->next!=0)
  41.         if (p->next==x)
  42.         {
  43.             p->next=x->next;
  44.             free(x);
  45.             break;
  46.         }
  47.         else p=p->next;
  48.     return 0;
  49. }
  50. struct Item *addtolist(char *buf, struct Item *first)
  51. {
  52.     struct Item *ptr=first, *cur=NULL;
  53.     while(ptr->next) ptr=ptr->next;
  54.     while(*buf)
  55.     {
  56.         cur=(struct Item *)malloc(sizeof(struct Item));
  57.         ptr->next=cur;
  58.         cur->c=*buf;
  59.         cur->next=NULL;
  60.         ptr=ptr->next;
  61.         buf++;
  62.     }
  63.     return first;
  64. }
  65. struct Item *createlist(char *buf)
  66. {
  67.     struct Item *head,*cur,*last;
  68.     char *newptr;
  69.     newptr=buf;
  70.     for (head=NULL; *newptr; newptr++)
  71.     {
  72.         if (head==NULL)
  73.         {
  74.             head=cur=(struct Item*)malloc(sizeof(struct Item));
  75.             head->c=*newptr;
  76.         }
  77.         else
  78.         {
  79.             cur=(struct Item*)malloc(sizeof(struct Item));
  80.             cur->c=*newptr;
  81.             last->next=cur;
  82.         }
  83.         last=cur;
  84.     }
  85.     last->next=NULL;
  86.     return head;
  87. }
  88. struct Item *dolist(struct Item *ptr)
  89. {
  90.         struct Item *returned=ptr, *cur=NULL, *first=ptr;
  91.         int f=0;
  92.         while(ptr)
  93.         {
  94.                 if (ptr && ptr->next && ptr->c=='0' && ptr->next->c=='1')
  95.                 {
  96.                         f=0;
  97.                         cur=first;
  98.                         if (first && first->c==' ') first=first->next;
  99.                         for (int i=0;i<2;i++)
  100.                         {
  101.                                 first->c=ptr->c;
  102.                                 first=first->next;
  103.                                 ptr=ptr->next;
  104.                         }
  105.                     while (ptr && ptr->next && ptr->c=='0' && ptr->next->c=='1')
  106.                    {
  107.                            for (int i=0;i<2;i++)
  108.                         {
  109.                                 first->c=ptr->c;
  110.                                 first=first->next;
  111.                                 ptr=ptr->next;
  112.                         }
  113.                                 f=1;
  114.                    }
  115.          if (!f) first=cur;
  116.                  if (first && f) first->c=' ';
  117.                 } else ptr=ptr->next;
  118.         }
  119.    if (first)
  120.            {
  121.                    cur=first;
  122.                first=first->next;
  123.                cur->next=NULL;
  124.                    deletelist(first);
  125.        }
  126.    first=cur;
  127.    if (first->c=='0' && first->next==NULL)
  128.      {
  129.            free(first);
  130.            first=NULL;
  131.            return first;
  132.      }
  133.         return returned;
  134. }
  135. int main()
  136. {
  137.     struct Item *first, *first1;
  138.     char buf[20];
  139.     int n=0,flag=1,h=1,enter=0;
  140.     while(puts("enter your string or ctrl+z for the end of file"),h)
  141.     {
  142.         do
  143.         {
  144.             *buf='\0';
  145.             n=scanf("%19[^\n]",buf);
  146.             if (n<0)
  147.             {
  148.                 printf("this is the end of file!");
  149.                                 getch();
  150.                 return 0;
  151.             }
  152.             if (n>0)
  153.             {
  154.                 if (flag==1)
  155.                 {
  156.                     enter=1;
  157.                     flag=0;
  158.                     first=createlist(buf);
  159.                 } else first=addtolist(buf,first);
  160.             }
  161.             if (n==0 && enter==0)
  162.             {
  163.                 printf("this was an empty string!\n");
  164.                 scanf("%*c");
  165.             }
  166.              if (n==0 && enter!=0)
  167.             {
  168.                 enter=0;
  169.                 flag=1;
  170.                 scanf("%*c");
  171.                 printf("\n");
  172.                 first=dolist(first);
  173.                 printlist(first);
  174.                 deletelist(first);
  175.                 printf("\n");
  176.             }
  177.         }
  178.         while(n>0);
  179.     }
  180.     return 0;
  181. }
  182.  
View raw paste Reply