Advertisement
Guest User

Untitled

a guest
Sep 16th, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.78 KB | None | 0 0
  1. #include "includes.h"
  2.      
  3. int main(int argc, char *argv[])
  4. {
  5.  
  6.      FILE *f;
  7.      int lines;
  8.      /*Oppretter to pekere til struct noder; "head" og en midlertidlig peker, "current" som vil peke på den relevante struct noden til enhver tid*/
  9.      struct node *head = NULL;
  10.      struct node *current = NULL;
  11.            
  12.      /*Skjekker om tre argumenter ble skrevet til konsoll*/  
  13.      if(argc == 3)
  14.      {
  15.            
  16.      /*åpner fil som er argument med indeks 2 fra konsoll*/
  17.      f = fopen(argv[2], "r");
  18.      
  19.         if(f == NULL)
  20.         {
  21.         /*Skriver ut feilmelding dersom filen er tom*/
  22.         perror("fopen feilet");
  23.                 return 0;
  24.         }
  25.      
  26.         else
  27.         {
  28.                 /*Setter av plass i minnet til "head" som er første struct node i den linkede listen*/
  29.                 head = malloc(sizeof(struct node));
  30.                 /*Setter av plass til det "head" peker på*/
  31.                 head->line = malloc(sizeof(char)*MAX);
  32.                 head->next = NULL;
  33.                 current = head;
  34.      
  35.                 /*fgets leser inn filen og legger det i current->line*/
  36.                 /*så lenge ikke fgets retunerer null, altså slutten av filen vil while-løkka kjøre */
  37.                 while (fgets(current->line, MAX, f))
  38.                 {  
  39.                         /*Setter av plass til det current->next peker på ("oppretter ny struct node")*/
  40.                         current->next = malloc(sizeof(struct node));
  41.                         current->next->line = malloc(sizeof(char) * MAX);
  42.             current->next->next = NULL;
  43.                         current = current->next;
  44.                         lines++;
  45.                 }
  46.      
  47.                 /*Frigjør minne*/
  48.                 /*free(current);
  49.                 free(current->next);*/
  50.                 current = head;
  51.                 fclose(f);
  52.  
  53.                 }
  54.      
  55.                 /*Dersom komandoen print er sendt inn.
  56.                 Bruker en string comparer til og sammenligne*/
  57.                 if(0 == strcmp("print", argv[1]))
  58.                 {
  59.                         //print(current);
  60.                         printf("Print text:\n");
  61.      
  62.                         /*Løkken går så lenge ikke current->next returner null, altså enden på den lenkede lista*/
  63.                         while(current)
  64.                         {
  65.                                 printf("%s\n", current->line);
  66.                                 /*Setter current til neste element/ struct node i den lenkede lista */
  67.                                 current = current->next;
  68.                         }
  69.                 }
  70.  
  71.                 else if(0 == strcmp("random", argv[1]))
  72.                 {
  73.                         //random(current, lines);
  74.                         srand(time(NULL));
  75.  
  76.                         /*Genererer et random tall i spekteret fra 0 til antall linjer i fila*/
  77.                         int random = rand() % lines;
  78.                         int i;
  79.  
  80.                         /*Løkka vil gå opp til random. Current pekeren vil gå igjennom den lenkede lista sine elementer helt til random*/
  81.                         for (i = 0; i < random; ++i)
  82.                         {
  83.  
  84.                                 current = current->next;
  85.  
  86.                         }
  87.  
  88.                         printf("Print a random line:\n     %s\n", current->line);
  89.                 }
  90.      
  91.                 else if(0 == strcmp("remove", argv[1]))
  92.                 {
  93.                         while(current)
  94.                         {
  95.                                 char new[MAX];
  96.                    
  97.                                 char *vowels = "aeiouy";
  98.                                 int i = 0;
  99.                                 int k = 0;
  100.      
  101.                                 for (i = 0; i < strlen(current->line); ++i)
  102.                                 {
  103.                                         char *temp = current->line;
  104.                                         /*Dersom temp[i] (en bokstav i linja) ikke inneholder en vokal */
  105.                                         if(!(strrchr(vowels, temp[i])))
  106.                                         {
  107.                                                 char bokstav = temp[i];
  108.                                                 /*Legger bokstaven som ikke var en vokal i new som er en array*/
  109.                                                 new[k] = bokstav;
  110.                                                 k++;
  111.                                         }
  112.                                 }
  113.      
  114.                                 new[k] = '\0';
  115.  
  116.                                 current = current->next;
  117.                                 printf("\n%s\n", new);
  118.                         }
  119.                 }
  120.  
  121.                 else if(0 == strcmp("replace", argv[1]))
  122.                 {
  123.                     int l = 0;
  124.                     int i = 0;
  125.                     int vcount = 0;
  126.                     char *vowels = "aeiouy";
  127.  
  128.             printf("\nReplace vowels...\n");
  129.                     for(l = 0; l <strlen(vowels); ++l){
  130.                 printf(" ...with vowel %c\n", vowels[vcount]);
  131.                             while(current)
  132.            
  133.                             {
  134.                                     char new[MAX];
  135.                            
  136.                                     int k = 0;
  137.                                
  138.                                             for(i = 0; i < strlen(current->line); ++i)
  139.                                             {
  140.                                                     char * temp = current -> line;
  141.                                            
  142.                                                     if(!(strrchr(vowels, temp[i])))
  143.                                                     {
  144.                                                             char bokstav = temp[i];
  145.                                                             new[k] = bokstav;
  146.                                                             k++;
  147.                                                     }else
  148.                                                     {
  149.                                                             char bokstav = vowels[vcount];
  150.                                                             new[k] = bokstav;
  151.                                                             k++;
  152.                                                     }
  153.                                             }
  154.  
  155.                                             //For og avslutte strengen
  156.                                             new[k] = '\0';
  157.                                
  158.                                             current = current->next;
  159.                                             printf("\n%s\n", new);
  160.                             }
  161.  
  162.                             ++vcount;
  163.                             current = head;
  164.                     }
  165.              }  
  166.  
  167.                 else if(0 == strcmp("len", argv[1]))
  168.                 {
  169.                     int len = 0;
  170.  
  171.                     while(current)
  172.                     {
  173.                         /*beregner lengden på current->line og legger det i "len". Altså en linje*/
  174.                         len += strlen(current->line);
  175.                         /*Current hopper videre til og peke på neste element i den lenkede lista*/
  176.                         current = current->next;
  177.                     }  
  178.      
  179.                     printf("The text is %d characters long\n", len);
  180.      
  181.                 }
  182.    
  183.                 else
  184.                 {
  185.                     /*Gir feilmelding dersom ingen av de korrekte komandoene blir skrevet inn*/
  186.                     perror("Illegal instruction:\nOnly 'print', 'random', 'replace', 'remove' or 'len'\n"); /*feilmelding */
  187.                     return -1;
  188.             }
  189.     }
  190.    
  191.     struct node *tmp = head;
  192.     struct node *copy = NULL;
  193.     while(tmp != NULL)
  194.     {
  195.         copy = head->next;
  196.         free(tmp->line);
  197.         free(tmp);
  198.         tmp = copy;
  199.     }
  200.        
  201.  
  202.         return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement