Ejercicio C++ -> Cadena de caracteres
Hola amigos, tengo que hacer el siguiente ejercicio:
Lea un texto de teclado e indique cuantas veces aparecen una letra mayúscula y cuantas veces una letra minúscula. Además deberá mostrar un texto con todas las letras en mayúscula. Ejemplo: ‘Hola amigo’ Hay 1 letra mayúscula Hay 8 letras minúsculas HOLA AMIGO -En lo que tengo hecho, no sé lo que falla, que es meter la frase en un array, y luego imprimir ese array para ver que está bien, pero no sé que pasa que tengo que escribir mucho más de lo que defino MAXCAD y además me imprime mucho menos. ¿Me echáis una mano? // Incluir E/S y Librerías Standard #include <iostream> #include <cstdlib> using namespace std; // Zona de Declaración de Constantes const char FINCAD = char (0); const char ENTER = '\n'; const int MAXCAD = 25; // Zona de Declaración de Tipos typedef char TCadena [MAXCAD+1]; // Zona de Cabeceras de Procedimientos y Funciones void leer_cadena ( TCadena &cadena ); void escribir_cadena ( TCadena cadena ); // Programa Principal int main() { // Zona de Declaración de Variables del Programa principal TCadena frase; cout << "Introduzca la frase que desee:" << '\n' << endl; cin.getline ( frase, MAXCAD + 1, ENTER ); leer_cadena ( frase ); escribir_cadena ( frase ); system("Pause"); // Hacer una pausa return 0; // Valor de retorno al S.O. } // Implementación de Procedimientos y Funciones void leer_cadena (TCadena &cadena ) { int i; char c; i=0; c = cin.get(); while ( ( i < MAXCAD + 1 ) && ( c != FINCAD ) ) { cadena [i] = c; c = cin.get(); i++; } cadena[i] = FINCAD; } void escribir_cadena (TCadena cadena ) { int i; i = 0; while ( ( i < MAXCAD + 1 ) && ( cadena [i] != FINCAD ) ) { cout << cadena [i]; i++; } } Muchas gracias! |
Hola, ¿por qué no usas isupper() para saber si un carácter es mayúscula o no? Y ya que estamos, toupper() para pasar a mayúsculas, isalpha() para saber si es una letra (y así solo contabilizas letras y te olvidas de los espacios, comas, etc).
Un saludo |
haz lo que dice Efirenet, aparte que yo lo haría todo en la misma función y la función leer_cadena la quitaría.
Coke. |
Hola amigos, al final lo hice así ayer, pero no he tenido tiempo de ponerlo aquí. El problema que tengo es que los espacios en blanco, comas, etc... me las cuenta como letras minusculas, por lo demás bien. Pero cómo soluciono ese problema??
[CODE]// Incluir E/S y Librerías Standard #include <iostream> #include <cstdlib> using namespace std; // Zona de Declaración de Constantes const char FINCAD = char (0); const char ENTER = '\n'; const int MAXCAD = 25; // Zona de Declaración de Tipos typedef char TCadena [MAXCAD + 1]; // Zona de Cabeceras de Procedimientos y Funciones void convertir_mayus ( TCadena cadena ); void mayus_minus ( TCadena cadena ); // Programa Principal int main() { // Zona de Declaración de Variables del Programa principal TCadena frase; cout << "Introduzca la frase que desee:" << '\n' << endl; cin.getline ( frase, MAXCAD + 1, ENTER ); cout << '\n' << endl; mayus_minus ( frase ); convertir_mayus ( frase ); system("Pause"); // Hacer una pausa return 0; // Valor de retorno al S.O. } // Implementación de Procedimientos y Funciones void mayus_minus ( TCadena cadena ) { int i, mayus, minus; i = 0; mayus = 0; minus = 0; while ( ( cadena[i] != FINCAD ) && ( i < MAXCAD ) ) { if ( isupper ( cadena[i] ) ) { mayus++; } else minus++; i++; } cout << "Hay "<< mayus << " letras mayusculas." << endl; cout << "Hay " << minus << " letras minusculas." << '\n' << endl; } void convertir_mayus ( TCadena cadena) { int i; i = 0; while ( ( cadena[i] != FINCAD) || ( i < MAXCAD ) ) { cadena[i] = toupper ( cadena[i] ); i++; } cout<< cadena << '\n' << endl; } [/CODE] Bueno, muchas gracias por vuestra ayuda!! |
jajajaja, acabo de encontrar ahora mismo el fallo, en la función de mayus_minus, puse if isupper para ver si es mayúculas, y luego puse un else para las minusculas, y claro, ahí me cuenta todo lo demás, por eso he puesto otro if islower para las minúsculas y ya me lo cuenta bien:
[CODE]void mayus_minus ( TCadena cadena ) { int i, mayus, minus; i = 0; mayus = 0; minus = 0; while ( ( cadena[i] != FINCAD ) && ( i < MAXCAD ) ) { if ( isupper ( cadena[i] ) ) { mayus++; } [COLOR="Red"]if ( islower ( cadena [i] ) ) { minus++; } i++;[/COLOR] } cout << "Hay "<< mayus << " letras mayusculas." << endl; cout << "Hay " << minus << " letras minusculas." << '\n' << endl; }[/CODE] |
si quieres hacerlo asi...
Código PHP:
Código PHP:
Código PHP:
muy parecido al tuyo. Coke. |
Hola. Exacto Coke, así era como se me había ocurrido a mí. Me hice un ejemplito y me quedó así:
[PHP] // Incluir E/S y Librerías Standard #include <iostream> #include <cstdlib> using namespace std; // Zona de Declaración de Constantes const int MAXCAD = 25; // Zona de Declaración de Tipos typedef char TCadena [MAXCAD+1]; typedef struct { int Mayusculas; int Minusculas; char *CadMayus; } TResultado; //Cabeceras TResultado ParsearCadena (char* cad); // Programa Principal int main() { // Zona de Declaración de Variables del Programa principal TCadena frase; TResultado mResult; cout << "Introduzca la frase que desee: "; cin.getline ( frase, MAXCAD + 1 ); mResult = ParsearCadena(frase); cout << "Numero de mayusculas: " << mResult.Mayusculas << endl; cout << "Numero de minusculas: " << mResult.Minusculas << endl; cout << "Frase en mayusculas: " << mResult.CadMayus << endl; system("Pause"); // Hacer una pausa return 0; // Valor de retorno al S.O. } TResultado ParsearCadena (char* cad) { TResultado mRes; char *contCad; mRes.Mayusculas = 0; mRes.Minusculas = 0; mRes.CadMayus = 0; contCad = cad; while (*contCad) { if (isalpha(*contCad)) // Si es una letra if (isupper(*contCad)) mRes.Mayusculas++; // Es una letra mayúscula else mRes.Minusculas++; // Es una letra minúscula *contCad = toupper(*contCad); contCad++; } mRes.CadMayus = cad; return mRes; } [/PHP] Se parece bastante a lo que posteó Coke. Un saludo |
La franja horaria es GMT +2. Ahora son las 13:30. |
Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate