numeros

La manera de cómo contar la cantidad de palabras que una cadena contiene separador de silabas  para ello tenemos que considerar que una cadena no siempre la cantidad de espacios más uno es igual a la cantidad de palabras, por ejemplo, podemos encontrarnos en la siguiente situación supongamos que la cadena ingresada sea la siguiente como vemos la cantidad de palabras es 2, sin embargo la cantidad de espacios es mucho mayor, ahora veamos cómo sería la situación si es que nosotros eliminamos los espacios sobrantes de modo que no haya un espacio al inicio ni tampoco espacios al final y que solamente haya un espacio entre cada palabra, es decir, que se quede de esta manera, en este caso si se cumpliría que la cantidad de palabras es igual a la cantidad de espacios más uno, solo en este caso, entonces lo que nosotros podríamos hacer para contar la cantidad de palabras, es primero limpiar la cantidad de espacios repetidos, en otras palabras, purgar la cadena para que tengamos el formato adecuado y allí poder recién contar la cantidad de palabras de una manera más sencilla, otra forma también sería contar la cantidad de veces en que aparece un espacio seguido de una letra, esto es más sencillo porque no es necesario estar modificando la cadena, entonces podemos tomar cualquiera de estas dos opciones, en esta ocasión vamos a usar la segunda opción para contar la cantidad de palabras, entonces, antes que todo, vamos a leer la cadena.

 

Nosotros en C++ podemos usar la clase string y valernos de sus funciones para desarrollar los programas de una manera más sencilla, esto es en el supuesto de que se nos esté pidiendo elaborar un programa usando simplemente datos predefinidos como un arreglo de caracteres, entonces tendríamos char cadena si es que queremos llamarlo con ese nombre y en este caso, un máximo de 250 caracteres, entonces le pedimos al usuario que ingrese una cadena de texto y pasamos a leer la cadena, para ello haremos uso de la función getline que es un método del objeto "cin" y sus argumentos son los siguientes como primer argumento, el lugar donde se va a almacenar la cadena y como segundo argumento, el límite máximo de caracteres que se admiten luego de haber leído la cadena, llamaremos a nuestra función contar palabras y le enviaremos la cadena misma, entonces nosotros diremos la cadena de texto ingresada contiene dicha cantidad de palabras como estamos observando aquí, esto de aquí se va a reemplazar por la cantidad de palabras que tiene la cadena en otras palabras, nuestra función va a ser una función que nos va a devolver un elemento, un tipo de datos de tipo entero, entonces pasamos a escribir la función propiamente dicha primero, el prototipo de la función sería el siguiente entero ContarPalabras y como argumento, sería la cadena, en este caso es un arreglo de caracteres ahora definimos el cuerpo de la función entonces la idea es recorrer toda la cadena y buscar las posiciones en las que se cumple que hay un espacio seguido de una letra para identificar que se trata de una letra, nosotros usaremos isalpha que es una función que nos va a devolver verdadero si es que se trata de una letra si es que se ingresan caracteres extraños no se consideraría como palabra si es que éste está después de un espacio y por tanto se obviaría todo lo que está después, ¿a qué me refiero con esto? que si en vez de la letra m acá estuviese un caracter extraño que no es admitido por la función isalpha, en ese caso, se contaría solamente una palabra, pero para este caso en específico las cadenas las vamos a ingresar con caracteres conocidos con letras en otras palabras y acá encontrar palabras entonces nosotros haremos un recorrido mediante un for, empezaremos en i igual, mientras que i sea menor que, aumentado de 1 en 1, eso es lo normal que nosotros usaríamos si es que conociésemos el tamaño, la cantidad de caracteres que tiene nuestra cadena, en este caso no, como estamos trabajando a bajo nivel, la manera correcta de recorrer una cadena es verificando en cada instante que aún hayamos llegado a la marca de fin de cadena, entonces en el for la condición se establece en el centro, en este caso sería, el for se va a seguir ejecutando mientras qué mientras que cadena sub i sea diferente de la marca de fin de cadena.

 

En un primer momento tenía pensado escribir una posición i que se evaluaría si es que es igual a un espacio y una posición i más uno que evaluaría si es una letra lo que le sigue a esa posición i pero no es correcto porque trataríamos de acceder a una posición siguiente aún cuando hayamos llegado a la marca de fin de cadena, y habría error, por lo tanto es conveniente que la posición empiece en uno, evaluamos si es que la posición uno es una letra y que lo que le antecede es un espacio, en ese caso contamos una palabra adicional y así no hay riesgo de tratar de acceder a memoria que no ha sido asignada entonces escribimos lo siguiente si la posición i menos 1 es igual a un espacio y además se cumple que es una letra el elemento de la posición i de cadena entonces aumentamos la cantidad de palabras no olvidemos entonces también inicializar este dato, finalmente devolvemos dicha cantidad.

 

 

 

Suponiendo de que haya un espacio al inicio y lo que le sigue sea una letra, no hay problema, pero suponiendo que al inicio se encuentre un caracter haya un espacio y luego hayan más caracteres, es decir algo como lo siguiente como nosotros empezamos en la posición 1 y comparamos con el anterior, es decir, comparamos que haya un espacio y una letra esto no se va a cumplir y no contaríamos ninguna palabra acá, como vemos, se está obviando un caso especial que en sí solamente ocurre para la primera posición porque para el resto de las posiciones se va a evaluar de manera normal, incluso si tuviéramos este otro caso con una d al final, si se evaluaría porque la posición i llega hasta d ya no continúa porque ya encontró una marca de fin de cadena pero llega hasta d y lo evalúa con respecto a su posición anterior como acá se muestra, entonces la única excepción sería que tenemos que además de evaluar esto, tenemos que evaluar por separado, fuera del for, tenemos que evaluar por separado la primera letra, el primer caracter de la cadena, en otras palabras si si cad sub cero es letra, osea si isalpha el elemento de posición cero de cad sub cero el elemento de posición cero de la cadena de caracteres cad es letra, entonces aumentamos la cantidad de palabras nuevamente.

 

 

No debemos olvidar que aquí tenemos que usar el nombre de cad ya que así lo estamos recibiendo como argumento acá también había escrito mal, era un if entonces ahora vamos a probar el programa ingresaremos una cadena con espacios al inicio, una palabra, otra palabra, tres espacios entre una palabra y otra, otra cantidad de caracteres y finalizaremos con espacios a pesar de todo esto el valor de la cantidad de palabras debería darnos 4 y efectivamente el programa cumple con lo especificado probaremos una vez más con otra cadena para demostrar que en realidad no fue solamente coincidencia entonces escribimos espacio espacio "abcd" espacio espacio "efg" espacio "hjk" y así sucesivamente, en este caso debería contarse una palabra, dos, tres, cuatro, cinco, seis, siete, ocho, nueve y diez, y el resultado es 7, ¿por qué no 10? porque debemos recordar que hemos usado la función isalpha es decir, en la segunda condición nosotros no hemos puesto si es diferente el espacio hemos puesto isalpha, eso quiere decir que solamente se cuenta la palabra cuando hay un espacio y le continúa una letra, un espacio y le continúa una letra y así ocurre con esta palabra, esta, esta, esta, esta, esta y mente, pero no ocurre con los puntos porque los puntos no son letras, por lo tanto corrijo lo que dije anteriormente y pues el resultado es correcto que debe ser 7 ya que solamente se considera la cantidad de palabras que empiezan con una letra y no signos de puntuación, ni otro caracter que pueda resultar extraño

5 out of 5 from 1 reviews

Write a review

Overal review:
Type your review:
(max 1000 characters)
Verification code:
No related tags found
Educacion in Bogota
...
Educacion in Madrid
...
escape rooms in Madrid
...