Ver las NORMAS de estos Foros Web ZackYFileS Chat ZackYFileS Agregar a Favoritos Contactar con Administrador
 
 

TU PUBLICIDAD AQUÍ!!
Navegación
Retroceder   Foros ZackYFileS >
OTROS TEMAS DE INTERES - INTERNET:
> PROGRAMACIÓN Lenguajes: Visual Basic, C++, etc
Nombre de usuario
Contraseña
Configuración de UsuarioAyuda (FAQs)Nuevos PostsBuscar


Respuesta
 
Herramientas
Antiguo 10/03/2006, 21:18   #1
Snake12
Usuario Activo
 
Avatar de Snake12
 
Fecha de ingreso: 07/mar/2003
Mensajes: 118
Snake12 está en el buen camino
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!
Snake12 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Antiguo 10/03/2006, 23:19   #2
Efirenet
Usuario Activo
 
Avatar de Efirenet
 
Fecha de ingreso: 06/dic/2004
Mensajes: 84
Efirenet llegará a ser famoso muy pronto
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
Efirenet está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 11/03/2006, 05:20   #3
Coke
Invitado
 
Mensajes: n/a

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.

Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 11/03/2006, 11:43   #4
Snake12
Usuario Activo
 
Avatar de Snake12
 
Fecha de ingreso: 07/mar/2003
Mensajes: 118
Snake12 está en el buen camino
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!!
Snake12 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 11/03/2006, 11:48   #5
Snake12
Usuario Activo
 
Avatar de Snake12
 
Fecha de ingreso: 07/mar/2003
Mensajes: 118
Snake12 está en el buen camino
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]
Snake12 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 11/03/2006, 13:13   #6
Coke
Invitado
 
Mensajes: n/a

si quieres hacerlo asi...

Código PHP:
void mayus_minus TCadena cadena )
{
     
int imayusminus;
     
     
0;
     
mayus 0;
     
minus 0;
     while ( ( 
cadena[i] != FINCAD ) && ( MAXCAD ) )
     {
           if ( 
isupper cadena[i] ) )
           {
                
mayus++;
           }
           else
               
minus++;
           
i++;
     }
     
cout << "Hay "<< mayus << " letras mayusculas." << endl;
     
cout << "Hay " << minus << " letras minusculas." << '\n' << endl;

tienes que usar isalpha como dijo efirenet

Código PHP:
void mayus_minus TCadena cadena )
{
     
int imayusminus;
     
     
0;
     
mayus 0;
     
minus 0;
     while ( ( 
cadena[i] != FINCAD ) && ( MAXCAD ) )
     {
         if(
isalpha(cadena[i])) 
         {
             if ( 
isupper cadena[i] ) )
             {
                  
mayus++;
             }
             else
                 
minus++;
          }
          
i++;
     }
     
cout << "Hay "<< mayus << " letras mayusculas." << endl;
     
cout << "Hay " << minus << " letras minusculas." << '\n' << endl;

y asi es como lo he hecho yo...todo en la misma funcion..

Código PHP:
void procesar_cadena (TCadena cadena )
{
    
int imayusculasminusculas;    
    
mayusculas minusculas 0;
    
cout<<ENTER;
    while ( ( 
MAXCAD ) && ( cadena[i] != FINCAD ) )
    {
        if(
isalpha(cadena[i]))
        {
            if(
isupper(cadena[i]))
            {
                
mayusculas++;
            }
            else
            {
                
minusculas++;
            }
        }
        
cadena[i] = toupper(cadena[i]);    
        
i++;
    }
    
cout<<ENTER;
    
cout <<"Hay "<< mayusculas <<" letras mayusculas\n";
    
cout <<"Hay "<< minusculas <<" letras minusculas\n\n";
    
cout << cadena<<"\n"<<endl;


muy parecido al tuyo.


Coke.

Última edición por Coke; 11/03/2006 a las 13:20.

Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 11/03/2006, 16:29   #7
Efirenet
Usuario Activo
 
Avatar de Efirenet
 
Fecha de ingreso: 06/dic/2004
Mensajes: 84
Efirenet llegará a ser famoso muy pronto
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
Efirenet está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Respuesta


Usuarios viendo actualmente este tema: 1 (0 usuarios registrados y 1 visitantes)
 

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado

Ir al foro

Temas similares
Tema Autor Foro Resp. Último mensaje
cadena aiwa z-l10 lovecraft ELECTRÓNICA GENERAL 19 07/10/2005 23:05
CADENA LOCAL por el ASTRA ??? caiman01 ANTENAS SAT: Instalación y Orientación 2 22/09/2004 17:03


!! ADVERTENCIAS !!: Las informaciones aquí publicadas NO CONTIENEN KEYS para la decodificación de ningún sistema: NO SON OPERATIVOS en sistemas SAT que precisen de su correspondiente suscripción.

ESTA TOTALMENTE PROHIBIDO EL USO DE ESTAS INFORMACIONES PARA LA MODIFICACIÓN O  DEFRAUDACIÓN DE SISTEMAS DE ACCESO CONDICIONAL.

ESTOS FOROS SON MODERADOS Y NO SE PERMITE LA PUBLICACIÓN DE INFORMACIONES ILEGALES POR PARTE DE LOS USUARIOS. EN CASO DE DETECTARSE ESTE TIPO DE INFORMACIONES, LOS USUARIOS SERÁN EXCLUIDOS DE ESTAS PÁGINAS.

USO DE COOKIES: Utilizamos COOKIES y de terceros para mejorar nuestros servicios y navegación por la web. Si continua navegando, consideramos que acepta su uso.  


La franja horaria es GMT +2. Ahora son las 16:27.


-------------------------------------------------------------------- --------------------------------------------------------------------

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
Hispaservicios - J.G.C - 29112549T - Rio Cinca, 2, 30 (50180) SPAIN.
Todos los derechos reservados. Prohibida cualquier reproducion total o parcial.


Foros Patrocinados por anunciantes.