Problema em código para quebrar string

1. Problema em código para quebrar string

joao pedro ache virgili
joaovirgili

(usa Ubuntu)

Enviado em 04/04/2016 - 21:41h

Olá, tenho um exercico em que recebeo N strings e devo retornar as strings ordenadas com as maiores palavras na frente.
Até então, o algoritmo não está completo, terminei uma etapa e estou testando, porém está dando errado.
Fiz a função para quebrar as frases e ela me retorna o numero de palavras criadas. Há um maximo de 50 strings de entrada e 50 caracteres em uma string.
Testei com algumas palavras e funcionou, ele esta aparecendo as palavras na tela, porém, aparentemente, quando entro uma string de 18+ caraceteres, o programa não faz mais nada e não entendo o porquê, pois o MAX está definido como 50. Aceito dicas de implementação.

algoritmo deve estar um pouco confuso então vou dar uma explicadinha:
criei uma struct Strings para armazenar as strings de entrada, assim terei string1.frase, string2.frase, string3.frase... Essas serão as frases de entrada do sistema.
criei uma struct Palavras para armazenar as palavras de 1 frase. assim terei partes1.palavra, partes2.palavra, partes3.palavra... Essas serão as palavras quebradas de 1 frase.
implementei a função quebra_frase para quebrar as palavras e retornar o numero de palavras geradas.

#include <stdio.h>
#include<string.h>
#define MAX 50
/* Uma struct para armazenar as strings de entrada.
** Outra struct para armazenar as palavras que serão quebradas na função quebra_palavra.

*/
struct Palavras {
char palavra[MAX];
};
struct Palavras partes[MAX];


int quebra_frase (char frase[MAX]);

int main (void) {
struct Strings {
char frase [MAX];
};

int n, i=0, num_palavra;
scanf("%d", &n);
struct Strings string[n];
while (i<n+1) {
fgets(string[i].frase, MAX, stdin);
i++;
}
num_palavra = quebra_frase(string[1].frase);
i=0;
while (i<num_palavra) {
printf("%s\n", partes[i].palavra);
i++;
}

return 0;
}

int quebra_frase (char frase[MAX]) {
int p=0, i=0, count=0, n=0;
for (i=0;i<strlen(frase);i++) {
if (frase[i] == ' ' || frase[i] == '\n') {
while (p<i) {
partes[count].palavra[n] = frase[p];
n++;
p++;
}
count++;
p=i+1;
n=0;
}
}
return count;
}
/*count é o numero de partes,
**n percorre a string da palavra
**p percorre as posições da palavra a ser guardada */


Não sei se esse foi o melhor jeito de fazer esse programa, mas parecia funcionar na minha cabeça.
Muito Obrigado.


  


2. Re: Problema em código para quebrar string

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/04/2016 - 11:28h

joaovirgili escreveu:

Olá, tenho um exercico em que recebeo N strings e devo retornar as strings ordenadas com as maiores palavras na frente.


Algum lugar do enunciado diz que você deve guardar essas N strings? Pelo que você escreveu aqui, eu enxergo N repetições, mas não a necessidade de alocar espaço para armazenar N frases.

Para cada uma das repetições, você lê uma frase, divide suas palavras (algo que você já pode fazer durante a leitura, se quiser), e, ao final da frase, ordena decrescentemente as palavras lidas de acordo com seu tamanho. Eis como eu entendi o enunciado que você colocou aqui. E a solução disso é bem mais simples do que o que você tentou fazer.

Se você acha que eu entendi erroneamente, por favor explique o enunciado melhor (talvez transcrevendo o que diz a questão original). Caso contrário, reescreva seu programa de modo a fazer o que foi pedido, não essa complicação desnecessária que você começou a fazer.


3. Re: Problema em código para quebrar string

joao pedro ache virgili
joaovirgili

(usa Ubuntu)

Enviado em 05/04/2016 - 12:44h

É, dormi pensando nessa possibilidade. Talvez nem precise armazenar as strings, apenas executar direto qnd ler. Porém, o exercício requer q leia tds as entradas antes de executar a saída, aí n sei como faria pra armazenar separadamente as palavras das strings. Quando chegar eu mando imagem do exercício, n consegui pelo celular







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts