0
I’ve been trying to find the mistake for a while, but I’m not getting it.
The program consists of reading a . txt file with the contents below, for example:
home-orange, otolaryngologist flower blackberry notebook table
Then the program must remove the 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 notebook table
I’ve done a lot of things and I can’t get that out, so I was wondering if someone could help me 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;
}