Author: Pavel Kravtsov Language: c
Description: 2a Timestamp: 2013-05-19 18:15:07 +0000
View raw paste Reply
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char* getstr();
  6. char* addspaces(char* buf);
  7. char* result(char* buf);
  8.  
  9. int main()
  10. {
  11. char *str=NULL, *res=(char *)malloc(101);
  12.     while((str = getstr()) )
  13.     {
  14.         res = result(str);
  15.         printf("Result    : %s\n\n", res);
  16.         free(res);
  17.         free(str);
  18.     }
  19. return 0;
  20. }
  21.  
  22. char* getstr()
  23. {
  24. char *ptr = (char *)malloc(1);
  25. char buf[101];
  26. int n, len = 0;
  27.   printf("Input line: ");
  28.     *ptr = '\0';
  29.     do
  30.     {
  31.         n = scanf("%100[^\n]", buf);
  32.         if(n < 0)
  33.             {
  34.                 free(ptr);
  35.                 ptr = NULL;
  36.                 break;
  37.             }
  38.  
  39.     if(n == 0)
  40.         scanf("%*c");
  41.     else
  42.         {
  43.             len += strlen(buf);
  44.             ptr = (char *) realloc(ptr, len + 1);
  45.             strcat(ptr, buf);
  46.         }
  47.  
  48.     }
  49.     while(n > 0);
  50. return ptr;
  51. }
  52.  
  53. char* addspaces(char* buf)
  54. {
  55. int i, len = 0;
  56.     len += strlen(buf);
  57.     i = len;
  58.     buf = (char *) realloc(buf, len + 3);
  59.     buf[i+2] = '\0';
  60.     buf[i+1] = ' ';
  61.     while(i >= 1)
  62.     {
  63.         buf[i] = buf[i-1];
  64.         i--;
  65.     }
  66.     buf[0]=' ';
  67. return buf;
  68. free(buf);
  69. }
  70.  
  71. char* result(char* buf)
  72. {
  73. int i = 0, j = 0, n;
  74. char prev, next, buffer[21], *res;
  75.     res = (char *)malloc(101);
  76.     *res = NULL;
  77.     buf = addspaces(buf);
  78.  
  79.     while(buf[i] != '\0')
  80.     {
  81.         if ((buf[i] == ' ')||(buf[i] == '\t'))
  82.         {
  83.             prev = buf[j+1];
  84.             next = buf[i-1];
  85.             if(prev == next)
  86.             {
  87.                 n = 0;
  88.                 while(j < i)
  89.                 {
  90.                     buffer[n] = buf[j+1];
  91.                     n++;
  92.                     j++;
  93.                 }
  94.                 buffer[n+1] = '\0';
  95.                 strncat(res, buffer, n);
  96.             }
  97.             j = i;
  98.             i++;
  99.         }
  100.         else
  101.             i++;
  102.     }
  103.  
  104. return res;
  105. free(res);
  106. }
  107.  
View raw paste Reply