Author: Not specified Language: text
Description: Not specified Timestamp: 2013-05-21 15:26:29 +0000
View raw paste Reply
  1. struct Item *createlist(char *buf)
  2. {
  3.     struct Item *head,*cur,*last;
  4.     char *newptr;
  5.     newptr=buf;
  6.     for (head=NULL; *newptr; newptr++)
  7.     {
  8.         if (head==NULL)
  9.         {
  10.             head=cur=(struct Item*)malloc(sizeof(struct Item));
  11.             head->c=*newptr;
  12.         }
  13.         else
  14.         {
  15.             cur=(struct Item*)malloc(sizeof(struct Item));
  16.             cur->c=*newptr;
  17.             last->next=cur;
  18.         }
  19.         last=cur;
  20.     }
  21.     last->next=NULL;
  22.     return head;
  23. }
  24. struct Item *dolist(struct Item *ptr)
  25. {
  26.         struct Item *returned=ptr, *cur=NULL, *first=ptr;
  27.         int f=0;
  28.         while(ptr)
  29.         {
  30.                 if (ptr && ptr->next && ptr->c=='0' && ptr->next->c=='1')
  31.                 {
  32.                         f=0;
  33.                         cur=first;
  34.                         if (first && first->c==' ') first=first->next;
  35.                         for (int i=0;i<2;i++)
  36.                         {
  37.                                 first->c=ptr->c;
  38.                                 first=first->next;
  39.                                 ptr=ptr->next;
  40.                         }
  41.                     while (ptr && ptr->next && ptr->c=='0' && ptr->next->c=='1')
  42.                    {
  43.                            for (int i=0;i<2;i++)
  44.                         {
  45.                                 first->c=ptr->c;
  46.                                 first=first->next;
  47.                                 ptr=ptr->next;
  48.                         }
  49.                                 f=1;
  50.                    }
  51.          if (!f) first=cur;
  52.                  if (first && f) first->c=' ';
  53.                 } else ptr=ptr->next;
  54.         }
  55.    if (first)
  56.            {
  57.                    cur=first;
  58.                first=first->next;
  59.                cur->next=NULL;
  60.                    deletelist(first);
  61.        }
  62.    first=cur;
  63.    if (first->c=='0' && first->next==NULL)
  64.      {
  65.            free(first);
  66.            first=NULL;
  67.            return first;
  68.      }
  69.         return returned;
  70. }
  71. int main()
  72. {
  73.     struct Item *first, *first1;
  74.     char buf[20];
  75.     int n=0,flag=1,h=1,enter=0;
  76.     while(puts("enter your string or ctrl+z for the end of file"),h)
  77.     {
  78.         do
  79.         {
  80.             *buf='\0';
  81.             n=scanf("%19[^\n]",buf);
  82.             if (n<0)
  83.             {
  84.                 printf("this is the end of file!");
  85.                                 getch();
  86.                 return 0;
  87.             }
  88.             if (n>0)
  89.             {
  90.                 if (flag==1)
  91.                 {
  92.                     enter=1;
  93.                     flag=0;
  94.                     first=createlist(buf);
  95.                 } else first=addtolist(buf,first);
  96.             }
  97.             if (n==0 && enter==0)
  98.             {
  99.                 printf("this was an empty string!\n");
  100.                 scanf("%*c");
  101.             }
  102.              if (n==0 && enter!=0)
  103.             {
  104.                 enter=0;
  105.                 flag=1;
  106.                 scanf("%*c");
  107.                 printf("\n");
  108.                 first=dolist(first);
  109.                 printlist(first);
  110.                 deletelist(first);
  111.                 printf("\n");
  112.             }
  113.         }
  114.         while(n>0);
  115.     }
  116.     return 0;
  117. }
  118.  
View raw paste Reply