[C con Clase] Problema con toupper
Steven Davidson
srd4121 en njit.edu
Lun Sep 24 18:01:48 CEST 2012
Hola Marcelo,
2012/9/24 Marcelo <marcefont en gmail.com>:
> El programa pide nombre y apellido del alumno, cinco notas y el promedio. El problema se me armó cuando traté de poner apellido y nombre todo en mayúsculas, el resto funciona bien. Uso Borland C++ builder 6. Desde ya les agradezco muchísimo.
>
[CORTE]
> cout << "\n\nEl alumno " << toupper(stApel) << ", " << toupper(stNom) << " "; //no se como implementar o donde implementar toupper
El problema está en que usas 'toupper()' incorrectamente. Como te
expliqué en un correo-e anterior, 'toupper()' retorna el carácter en
mayúsculas - si se puede. Esto implica que la función recibe un solo
carácter y retorna un solo carácter. También expliqué que esta función
no modifica el parámetro que pasas.
Una solución es aplicar 'toupper()' a cada carácter de cada cadena. Por ejemplo,
int n = strlen( stApel );
for( int i=0; i <= n; i++ )
stApel[i] = toupper( stApel[i] );
La otra solución es ir recogiendo cada carácter del canal de entrada
(el teclado) y cambiar a mayúsculas antes de asignarlo a 'stApel'. Por
ejemplo,
int i;
for( i=0; i < 19; i++ )
{
cin >> stApel[i];
stApel[i] = toupper( stApel[i] );
}
stApel[i] = 0; // Agregamos el carácter nulo al final de la cadena
Otra alternativa es usar la clase 'AnsiString' de Borland, ya que usas
C++ Builder. Esta clase permite, entre otras funciones miembro, la
función miembro, 'UpperCase()', que realiza la tarea que quieres. Esto
sería:
AnsiString stApel;
...
stApel.UpperCase();
Espero que esto te aclare la duda.
Steven
Más información sobre la lista de distribución Cconclase