I'm trying to find the error, but I'm not getting it.
The program consists of reading a .txt file with the following content, for example:
Home-orange, otolaryngologist flower notebook-blackberry table
Then the program should remove special characters and words that have more than 20 letters. And then sort them in alphabetical order, giving the following output:
Blackberry house flower orange table notebook
I've done a lot of things and can not get this output, I'd like to know if anyone could help and let me know where I'm going wrong. Follow the code below and thank you. :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *arq;
char ch[50];
char simbolos[] = {' ', ',', '-','\n'};
char *palavra = NULL;
char **matriz;
int resul, tamanho, i, j, k, matlen;
//abrindo o arquivo
arq = fopen("texto.txt", "r");
//linha
matriz=(char**)malloc(sizeof(char*)*1024);
while( (fgets(ch, 1024, arq))!=NULL ){
palavra = strtok(ch, simbolos);
tamanho = strlen(palavra);
if(tamanho > 20){
//printf("String nao salva\n");
*palavra = NULL;
}
else{
//coluna
matriz[i]=(char*)malloc(sizeof(char)*21);
//copia a string que está no ponteiro teste pra posição I da matriz e imprime na tela, incrementa o i para correr a matriz
//matlen - conta o tamanho da matriz - insere um elemento, aumenta mais 1 no contador
strcpy(matriz[i], palavra);
printf("%s", matriz[i]);
i++;
matlen++;
}
}
//matlen = variável para armazenar o tamanho da matriz
//comparo as posicoes j começa sempre 1 posição na frente o i
//-1 quer dizer que a primeira palavra [i] fica na fretne da de [j], então nada acontece
for(i=0;i<matlen; i++){
for(j=i+1;j<matlen; j++){
resul = strcmp(matriz[i], matriz[j]);
if(resul == -1){
}
//teoricamente o único resultado aqui vai ser 1, porque o 0 que é igual vai ser eliminado pela regra que vou fazer la em cima
else{
strcpy(palavra, matriz[i]); // teste é um ponteiro auxiliar pra eu armazenar a string e trocar de posição
strcpy(matriz[i], matriz[j]); //copio a matriz
strcpy(matriz[j], palavra);
}
}
}
//imprimindo a matriz só pra ver se organizou corretamente
printf("\n\n\n%s", matriz[0]);
printf("\n%s", matriz[1]);
printf("\n%s", matriz[2]);
printf("\n%s", matriz[3]);
printf("\n%s", matriz[4]);
fclose(arq);
return 0;
}