C / string.h

Rotnes
25 de Abril del 2010
Ejercicio 19: Diseña un programa que lea de teclado un párrafo y lo almacene como una cadena de caracteres (para simplificar el párrafo solo contendrá letras). La longitud máxima del párrafo será de 2000 caracteres. Seguidamente se creará una cadena que contenga la palabra más larga del párrafo seguida de un * y de la palabra más corta. Una tercera cadena contendrá a la segunda seguida de la palabra Fin. Las tres cadenas se visualizarán en pantalla.


He realizado este código:

#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()
{
char parrafo[200]="";
char parrafo2[100]="";
char parrafo3[100]="";
int i, j, k, fin, menor, mayor, aux, empezar, palabrat, palabraf, palabrai, maf, mai, mef, mei;


fin=0;

printf ("Dame un parrafon");
gets(parrafo);

empezar=0;
j=0;
k=0;
i=0;

while (i<=1999)
{
if (empezar==0)
{
palabrai=i;
empezar++;
}

if (parrafo[i-1]==' ')
{
palabrai=i;
}

if (parrafo[i]==' ')
{
palabraf=i-1;

if (empezar==1)
{
empezar++;
menor=palabrat;
mayor=palabrat;
}

palabrat=palabraf-palabrai;

if (empezar==2)
{
aux=palabrat;
}

if (aux>palabrat)
{
mayor=aux;
maf=palabraf;
mai=palabrai;
}

if (aux<palabrat)
{
menor=aux;
mef=palabraf;
mei=palabrai;
}

aux=palabrat;

i++;
}
}
for (i=maf; i<=mai; i++)
{
parrafo2[j]=parrafo[i];
j++;
}

parrafo2[j]='*';
j++;

for (i=mef; i<=mei; i++)
{
parrafo2[j]=parrafo[i];
j++;
}

strcpy(parrafo2,parrafo3);
strcat(parrafo3,"Fin");

puts(parrafo);
puts(parrafo2);
puts(parrafo3);

getch();
}

Problema, no sale del bucle while, este codigo me ha llevado un par de horas y estado media hora intentadolo resolver y otra media buscando información para resolverlo.

Posdata: En otro ejercicio me pide decir si la palabra que he escrito en un array esta en otro. Y eso creo que se haría comparandolo strcmp(parrafo,palabra), pero realmente lo que hago es decirle que me lo compare con todo el parrafo, ¿no hay alguna forma para comparlo con una palabra clave de ese array?

Gracias por vuestro tiempo.

javier_h
25 de Abril del 2010
Para el segundo ejercicio has usar la función strstr(cadena, palabra_que_buscas).

Para tu ejercicio el while seria más efectivo si usaras la condición (parrafo[i]!=''). De esta forma si tu parrafo es más corto deja de hacerte el bucle.
El contador i lo tienes dentro de una condición por lo que no se incrementa y nunca saldrá del while. Pon i detras de la llave "}" y te ira

nestor1991ag
25 de Abril del 2010
Gracias, la verdad es que no habia caido es un fallo bastante tonto.