Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- struct Word {
- char tab[30];
- int count;
- };
- struct Node {
- struct Word * data;
- struct Node * next;
- };
- struct List {
- struct Node * head;
- };
- void addToList(struct List * list, char* p) {
- struct Node * newNode = malloc(sizeof(struct Node));
- newNode->next = list->head;
- list->head = newNode;
- newNode->data = malloc(sizeof(struct Word));
- strcpy(newNode->data->tab, p);
- newNode->data->count = 1;
- }
- void printList(struct List *list) {
- struct Node * i = list->head;
- while(i != NULL) {
- printf("%s, %d\n", i->data->tab, i->data->count);
- i = i->next;
- }
- }
- int countUniqueWordOccurences(struct List * list) {
- struct Node * n;
- int counter = 0;
- n = list->head;
- while(n != NULL) {
- n = n->next;
- counter += 1;
- }
- return counter;
- }
- int countAllWordOccurences(struct List * list) {
- struct Node * n;
- int counter = 0;
- n = list->head;
- while(n != NULL) {
- counter += n->data->count;
- n = n->next;
- }
- return counter;
- }
- char* getLongestWord(struct List* list) {
- struct Node *current = list->head;
- struct Node *longest = current;
- size_t maxLen = strlen(longest->data->tab);
- while (current != NULL) {
- size_t currentLen = strlen(current->data->tab);
- if(currentLen > maxLen) {
- longest = current;
- maxLen = currentLen;
- }
- current = current->next;
- }
- return longest->data->tab;
- }
- char* readNextWordFromFile(FILE * f, struct List * list) {
- char * p = malloc(sizeof(char)*30);
- fscanf(f, "%s", p);
- return p;
- }
- void buildListFromFile(FILE* file, struct List *list) {
- while(feof(file) == 0) {
- struct Node * currentNode;
- char * currentWord;
- int listContainsCurrentWord = 0;
- listContainsCurrentWord = 0;
- currentWord = readNextWordFromFile(file, list);
- currentNode = list->head;
- while (currentNode != NULL) {
- if (strcmp(currentWord, currentNode->data->tab) == 0) {
- currentNode->data->count += 1;
- listContainsCurrentWord = 1;
- free(currentWord);
- break;
- }
- currentNode = currentNode->next;
- }
- if (!listContainsCurrentWord) {
- addToList(list, currentWord);
- }
- }
- }
- int main() {
- struct List list = { NULL };
- char * longestWord;
- int uniqueWordsCount, allWordsCount;
- FILE * f = fopen("tekst.txt", "r");
- if(f == NULL) {
- printf("Blad przy otwieraniu pliku\n");
- return 1;
- }
- buildListFromFile(f, &list);
- uniqueWordsCount = countUniqueWordOccurences(&list);
- allWordsCount = countAllWordOccurences(&list);
- printf("Liczba niepowtarzajacych sie slow: %d\nLiczba wszystkich slow: %d\n", uniqueWordsCount, allWordsCount);
- printList(&list);
- longestWord = getLongestWord(&list);
- printf("Najdluzsze slowo: %s\n", longestWord);
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement