[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