Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. short int addToFile(char *directory, char *text);
  7. char* expandRealloc(char *ptrS, size_t n);
  8. char* getWord(FILE *ptr);
  9. short int checkDenied(const char *str);
  10. char* reverseString(char *baseString);
  11. int sortCompare(const void *a, const void *b);
  12.  
  13. char signHold[2];
  14.  
  15. int main(int argc, char* argv[])
  16. {
  17.     FILE *infile = NULL;
  18.     char *string = NULL;
  19.     int flag = 1;
  20.     int flagNext = 0;
  21.     if(argc != 3)
  22.     {
  23.         printf("Error: Improper number of arguments");
  24.         return EXIT_FAILURE;
  25.     }
  26.  
  27.     remove(argv[2]);
  28.     if((addToFile(argv[2], "")) == 1)
  29.         return 1;
  30.     if((infile = fopen(argv[1], "r")) == NULL)
  31.     {
  32.     perror("Error");
  33.     return 1;
  34.     }
  35.  
  36.     while(feof(infile) == 0)
  37.     {
  38.         string = getWord(infile);
  39.        
  40.         if(checkDenied(string))
  41.         {
  42.             if(flag == 1)
  43.             {
  44.                 addToFile(argv[2], string);
  45.             }
  46.             else
  47.             {
  48.                 addToFile(argv[2], string);
  49.                 addToFile(argv[2], string);
  50.                 flag = 1;
  51.             }
  52.         }
  53.         else
  54.         {
  55.             if (flag == 1)
  56.             {
  57.                 addToFile(argv[2], string);
  58.             }
  59.             else
  60.             {
  61.                 addToFile(argv[2], string);
  62.                 addToFile(argv[2], string);
  63.             }
  64.         flag = 0;
  65.         }
  66.         /*if(flag == 1)
  67.         {
  68.         if((addToFile(argv[2], string)) == 1)
  69.             {
  70.                 fclose(infile);
  71.                 free(string);
  72.                 return 1;
  73.             }
  74.         /*qsort(string,strlen(string),sizeof(char),&sortCompare);flag = 0;
  75.         }
  76.         if(!checkDenied(string))
  77.         {
  78.            
  79.             /*string = reverseString(string);
  80.         }
  81.  
  82.             if((addToFile(argv[2], string)) == 1)
  83.             {
  84.                 fclose(infile);
  85.                 free(string);
  86.                 return 1;
  87.             }*/
  88.        
  89.         if(signHold[0] != EOF)
  90.             if((addToFile(argv[2], signHold)) == 1)
  91.             {
  92.                
  93.                 fclose(infile);
  94.                 free(string);
  95.                 return 1;
  96.            
  97.             }
  98.            
  99.         free(string);
  100.     }
  101.  
  102.     fclose(infile);
  103.     return EXIT_SUCCESS;
  104. }
  105.  
  106. short int addToFile(char *directory, char* text)
  107. {
  108.     FILE *ptr;
  109.     if((ptr = fopen(directory, "a+")) == NULL)
  110.         return 1;
  111.     fprintf(ptr, "%s", text);
  112.     fclose(ptr);
  113.     return EXIT_SUCCESS;
  114. }
  115.  
  116. char* expandRealloc(char *ptrS, size_t n)
  117. {
  118.     void *tmp = NULL;
  119.    
  120.     if((tmp = realloc(ptrS,n)) == NULL)
  121.     {
  122.         perror("Error");
  123.         exit(EXIT_FAILURE);
  124.     }
  125.     else
  126.     {
  127.         ptrS = tmp;
  128.         return ptrS;
  129.     }
  130. }
  131.  
  132. char* getWord(FILE* ptr)
  133. {
  134.     char* tempString = NULL;
  135.     size_t memSize = 0;
  136.     int c;
  137.  
  138.     tempString = expandRealloc(NULL, sizeof(char));
  139.     while((c = fgetc(ptr)))
  140.     {
  141.        
  142.         if(isalpha(c) != 0)
  143.         {
  144.             tempString = expandRealloc(tempString, (memSize+1)*sizeof(char));
  145.             tempString[memSize] = c;
  146.             ++memSize;
  147.         }
  148.         else
  149.         {
  150.  
  151.             signHold[0] = c;
  152.             signHold[1] = '\0';
  153.             break;
  154.         }
  155.     }
  156.         tempString = expandRealloc(tempString, (memSize+1)*sizeof(char));
  157.     tempString[memSize] = '\0';
  158.     return tempString;
  159. }
  160.  
  161. short int checkDenied(const char *str)
  162. {
  163.     int i;
  164.     i = strspn("h", str);
  165.     i += strspn("H", str);
  166.  
  167.     if(i >= 1)
  168.     {
  169.         i = strspn("e", str);
  170.         i += strspn("E", str);
  171.        
  172.         if(i >= 1)
  173.         {
  174.             i = strspn("t", str);
  175.             i += strspn("T", str);
  176.  
  177.             if(i == 0)
  178.             {
  179.                 return 0;
  180.             }
  181.         }
  182.     }
  183.     return 1;
  184. }
  185.  
  186. char* reverseString(char *baseString)
  187. {
  188.     char* revString;
  189.     int stringLen;
  190.     int counter = 0;
  191.  
  192.     stringLen = strlen(baseString);
  193.     revString = expandRealloc(NULL, (stringLen+1)*sizeof(char));
  194.    
  195.     for(counter = 0; counter < stringLen; counter++)
  196.     {
  197.         revString[stringLen - counter - 1] = baseString[counter];
  198.     }
  199.  
  200.     free(baseString);
  201.     revString[stringLen] = '\0';
  202.    
  203.     return revString;
  204. }
  205.  
  206. int sortCompare(const void *a, const void *b)
  207. {
  208.     char c1 = *((const char*)(a));
  209.     char c2 = *((const char*)(b));
  210.     const char dif = ('a' - 'A');
  211.  
  212.     if ((c1 <= 'Z') && (c1 >= 'A'))
  213.     {
  214.         c1 += dif;
  215.     }
  216.  
  217.     if ((c2 <= 'Z') && (c2 >= 'A'))
  218.     {
  219.         c2 += dif;
  220.     }
  221.  
  222.     return (c1 > c2);
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement