| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Roberto Hernández Sánchez
Registrado: 10 Nov 2007 Mensajes: 5 Ubicación: México
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |
 |
|
|