/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con programa para dividir una frase en palabras...

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Roberto Hernández Sánchez



Registrado: 10 Nov 2007
Mensajes: 5
Ubicación: México

MensajePublicado: 30/11/2007 7:12 pm
Título: Problema con programa para dividir una frase en palabras...

Saludos....

Me he topado con el siguiente ejercicio...:

Escribir un programa que cuente el numero de palabras de mas de cuatro caracteres de una frase terminada en '.' y guardada en un vector.

El problema es que no puedo dividir la frase en palabras para despues contar el numero de caracteres de estas...

en cuanto tenga una idea y haya avanzado en el codigo lo pongo aqui...

si alguien me puede ayudar se los agradeceria mucho...

sin mas por el momento me despido... y gracias de antemano...
_________________
Se libre, se Linux....
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 30/11/2007 8:58 pm
Título:

Si el lenguaje de programacion es C podrias utilizar la funcion strtok (prototipo en <string.h>) para separar la frase en palabras junto con strlen (prototipo tambien en <string.h>) para contar el numero de caracteres de cada una de estas.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
trauma



Registrado: 02 Dic 2007
Mensajes: 3

MensajePublicado: 02/12/2007 1:10 pm
Título:

De forma artesanal, vas contando caracteres que no sean espacios ( isspace( ) ). Cada vez que lleges a uno, miras si hay más de X caracteres que no lo sean, y vuelta a empezar.

Se supone que entre las palabras solo hay un y solo un espacio. Para más caracteres adiciones de separación ( más de un espacio, comas [,], habria que hacer comprobaciones adicionales.

Hechale un vistazo a ctype.h
Volver arriba
Roberto Hernández Sánchez



Registrado: 10 Nov 2007
Mensajes: 5
Ubicación: México

MensajePublicado: 02/12/2007 9:10 pm
Título: ya se me habia ocurrido...

Saludos...

hoy por la mañana se me ocurrio presisamente ir checando cada parte del vector e ir contando los caracteres antes de toparme con un espacio.... ya estoy trabajando en este codigo.... ¿el espacio lo puedo comparar solo como ´ ´? ¿verdad?... y despues a leer sobre strtok... (primera vez que lo escucho)... sobre strlen ya habia escuchado (algo biene en el manual con el que estudio, pero ni un solo ejemplo)... y ya pondre el codigo usando estas dos funciones de string.h... bueno muchas gracias a ambos y ya estare publicando aqui los codigos ya resueltos...

Gracias...
_________________
Se libre, se Linux....
Volver arriba
_Leo_



Registrado: 20 Oct 2005
Mensajes: 285
Ubicación: Buenos Aires, Argentina

MensajePublicado: 03/12/2007 4:17 pm
Título:

Te recomiendo que recorras el vector. La función strok() destruye la cadena original agregándoles ceros. En caso de usarla deberías siempre duplicar la cadena y trabajar sobre la copia. Luego liberar la memoria de la misma.
Todo eso es muy engorroso y lo podés evitar de la otra manera.

Sí, te conviene comparar cada caracter contra ' ', por ejemplo:
Código:

if (cadena[pos] == ' ') {
...
}


Donde pos debería ser un entero entre cero y uno menos que la longitud total. La que podés encontrar con strlen().

Cuidado que antes de llamar a strlen() tenés que verificar que el puntero que te pasen como cadena no sea null. Esto último depende de dónde tengas que sacar el texto a inspeccionar.
_________________
_Leo_
drk.com.ar

clasdix.com.ar
Volver arriba
Roberto Hernández Sánchez



Registrado: 10 Nov 2007
Mensajes: 5
Ubicación: México

MensajePublicado: 05/12/2007 6:19 pm
Título: Aqui esta el primer codigo....

Como dije, aqui esta el primer codigo el cual recorre todo el vector para comprobar que lo unico que cuente sean caracteres entre 'A'-'Z' y 'a'-'z'... como dijo trauma para eliminar el conteo de un caracter hay que agregar una comprobación....

if (vector[pos]!='caracter')
{

}

Aqui pongo el codigo que hice....

#include <stdio.h>
#include <string.h>
#define MAX 100

int main()
{
char frase[MAX];
int i,j,cont=0,l=0;
j=0;
/*Ingresamos la frease*/
printf ("Ingrese una frase: \n");
gets (frase);
/*Calculamos la longitud del vector*/
l=(strlen(frase));
/*Comensamos a evaluar el vector*/
for (i=0;i<l;i++)
{
if (frase[i]!='\0')
{
if (frase[i]!=' ')
if (frase[i]!='.')
if (frase[i]!=',')
if (frase[i]!='?')
j++;
else
j=0;
else
j=0;
else
j=0;
else
j=0;
if (j>=4)
{
j=0;
cont++;
}
}
}
printf("\nEn la frase '%s', existen %d palbra(s) de 4 o más caracteres.",frase,cont);
return 0;
}

Despues pondre el otro codigo utilizando strtok... Ahh... se me olvidaba, cuando pregunto:

if (frase[i]!='¿')
{
. . .
}

me marca un error....sera por el compilador.... Bueno, me despido y gracias por la ayuda...
_________________
Se libre, se Linux....
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 377
Ubicación: Cono Sur

MensajePublicado: 05/12/2007 7:20 pm
Título: Re: Aqui esta el primer codigo....

Roberto Hernández Sánchez escribió:

Despues pondre el otro codigo utilizando strtok... Ahh... se me olvidaba, cuando pregunto:

if (frase[i]!='¿')
{
. . .
}

me marca un error....sera por el compilador.... Bueno, me despido y gracias por la ayuda...
Tal vez sea porque a ese carácter (el '¿') el compilador no te lo está reconociendo como tal, porque no forma parte del formato de caracteres estándares de la plataforma que estás utilizando. Si lo compilas bajo Windows reemplaza ese símbolo por su correspondiente valor de generación en hexadecimal '\xA8' (en todos los casos donde se presente '¿' -ASCII Extendido-). Y para Linux también tendrá su correspondiente valor de generación pero en este momento no recuerdo cuál es.

Un saludo
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com