#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

typedef struct palavra{   /*declaração do tipo de uma célula*/
    char letras[30];
    struct palavra* prox;
}Palavra;

Palavra* criafrase(){ /*a "lista" é uma frase, logo 'criafrase' retorna um ponteiro null que aponta pra uma célula 'Frase'*/
    return NULL;
}

int contaPalavras(Palavra* frase){ /* função para indicar a quantidade de palavras digitadas*/

    Palavra* aux = frase;
    int c = 0;
    while(aux != NULL){
        c++;
        aux = aux->prox;
    }
    return c;
}

Palavra* insere_palavra(Palavra* fraseppt,char palavra_nova[30]){

    Palavra* novofraseppt;

    novofraseppt = (Palavra*) malloc(sizeof(Palavra));
    strcpy(novofraseppt->letras, palavra_nova);
    novofraseppt->prox = NULL;
    if(fraseppt == NULL){
        return novofraseppt;
    }
    Palavra* palavra_anterior=NULL;
    Palavra* busca_palavra=fraseppt;
    while(busca_palavra!=NULL){
         palavra_anterior = busca_palavra;
         busca_palavra = busca_palavra->prox;
    }
    palavra_anterior->prox = novofraseppt;
    return fraseppt;
}

void imprime_frase(Palavra* frase1){ /* função que dada uma lista imprime uma frase*/
    Palavra* aux = frase1;
    while(aux != NULL){
        printf("%s", aux->letras);
        printf(" ");
        aux = aux->prox;
    }
}

Palavra* forma_frase(char cadeia[80],int num){
    int i,j,k;
    Palavra* lista = NULL;
    int ultimoEspaco = 0;
    for(i=0;i<num;i++){
        if(cadeia[i] == 32){
            char palavra[30];
            for(k = 0; k < 30; k++){
                palavra[k] = 0;
            }
            for(j = ultimoEspaco; j < i; j++){
                palavra[j-ultimoEspaco] = cadeia[j];
            }
            lista = insere_palavra(lista, palavra);

            ultimoEspaco = i+1;
        }
    }
    return lista;
}

int main()
{
    setlocale(LC_ALL, "Portuguese");
    printf("\n");
    printf("Digite algo bonito: ");
    char palavra[80];
    scanf("%[^\n]s", palavra);

    int t = strlen(palavra);
    palavra[t] = ' ';
    palavra[t+1] = '\0';

    Palavra* lista = forma_frase(palavra, strlen(palavra));
    imprime_frase(lista);
    printf("\n%d", contaPalavras(lista));
    printf("\n");
    printf("%s",lista->prox->letras);
    return 0;
}
