Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "includes.h"
- int main(int argc, char *argv[])
- {
- FILE *f;
- int lines;
- /*Oppretter to pekere til struct noder; "head" og en midlertidlig peker, "current" som vil peke på den relevante struct noden til enhver tid*/
- struct node *head = NULL;
- struct node *current = NULL;
- /*Skjekker om tre argumenter ble skrevet til konsoll*/
- if(argc == 3)
- {
- /*åpner fil som er argument med indeks 2 fra konsoll*/
- f = fopen(argv[2], "r");
- if(f == NULL)
- {
- /*Skriver ut feilmelding dersom filen er tom*/
- perror("fopen feilet");
- return 0;
- }
- else
- {
- /*Setter av plass i minnet til "head" som er første struct node i den linkede listen*/
- head = malloc(sizeof(struct node));
- /*Setter av plass til det "head" peker på*/
- head->line = malloc(sizeof(char)*MAX);
- head->next = NULL;
- current = head;
- /*fgets leser inn filen og legger det i current->line*/
- /*så lenge ikke fgets retunerer null, altså slutten av filen vil while-løkka kjøre */
- while (fgets(current->line, MAX, f))
- {
- /*Setter av plass til det current->next peker på ("oppretter ny struct node")*/
- current->next = malloc(sizeof(struct node));
- current->next->line = malloc(sizeof(char) * MAX);
- current->next->next = NULL;
- current = current->next;
- lines++;
- }
- /*Frigjør minne*/
- /*free(current);
- free(current->next);*/
- current = head;
- fclose(f);
- }
- /*Dersom komandoen print er sendt inn.
- Bruker en string comparer til og sammenligne*/
- if(0 == strcmp("print", argv[1]))
- {
- //print(current);
- printf("Print text:\n");
- /*Løkken går så lenge ikke current->next returner null, altså enden på den lenkede lista*/
- while(current)
- {
- printf("%s\n", current->line);
- /*Setter current til neste element/ struct node i den lenkede lista */
- current = current->next;
- }
- }
- else if(0 == strcmp("random", argv[1]))
- {
- //random(current, lines);
- srand(time(NULL));
- /*Genererer et random tall i spekteret fra 0 til antall linjer i fila*/
- int random = rand() % lines;
- int i;
- /*Løkka vil gå opp til random. Current pekeren vil gå igjennom den lenkede lista sine elementer helt til random*/
- for (i = 0; i < random; ++i)
- {
- current = current->next;
- }
- printf("Print a random line:\n %s\n", current->line);
- }
- else if(0 == strcmp("remove", argv[1]))
- {
- while(current)
- {
- char new[MAX];
- char *vowels = "aeiouy";
- int i = 0;
- int k = 0;
- for (i = 0; i < strlen(current->line); ++i)
- {
- char *temp = current->line;
- /*Dersom temp[i] (en bokstav i linja) ikke inneholder en vokal */
- if(!(strrchr(vowels, temp[i])))
- {
- char bokstav = temp[i];
- /*Legger bokstaven som ikke var en vokal i new som er en array*/
- new[k] = bokstav;
- k++;
- }
- }
- new[k] = '\0';
- current = current->next;
- printf("\n%s\n", new);
- }
- }
- else if(0 == strcmp("replace", argv[1]))
- {
- int l = 0;
- int i = 0;
- int vcount = 0;
- char *vowels = "aeiouy";
- printf("\nReplace vowels...\n");
- for(l = 0; l <strlen(vowels); ++l){
- printf(" ...with vowel %c\n", vowels[vcount]);
- while(current)
- {
- char new[MAX];
- int k = 0;
- for(i = 0; i < strlen(current->line); ++i)
- {
- char * temp = current -> line;
- if(!(strrchr(vowels, temp[i])))
- {
- char bokstav = temp[i];
- new[k] = bokstav;
- k++;
- }else
- {
- char bokstav = vowels[vcount];
- new[k] = bokstav;
- k++;
- }
- }
- //For og avslutte strengen
- new[k] = '\0';
- current = current->next;
- printf("\n%s\n", new);
- }
- ++vcount;
- current = head;
- }
- }
- else if(0 == strcmp("len", argv[1]))
- {
- int len = 0;
- while(current)
- {
- /*beregner lengden på current->line og legger det i "len". Altså en linje*/
- len += strlen(current->line);
- /*Current hopper videre til og peke på neste element i den lenkede lista*/
- current = current->next;
- }
- printf("The text is %d characters long\n", len);
- }
- else
- {
- /*Gir feilmelding dersom ingen av de korrekte komandoene blir skrevet inn*/
- perror("Illegal instruction:\nOnly 'print', 'random', 'replace', 'remove' or 'len'\n"); /*feilmelding */
- return -1;
- }
- }
- struct node *tmp = head;
- struct node *copy = NULL;
- while(tmp != NULL)
- {
- copy = head->next;
- free(tmp->line);
- free(tmp);
- tmp = copy;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement