Los punteros y
las cadenas char*
Las cadenas
char* están basadas en punteros al igual que en el lenguaje C. Para formar una
palabra se deben declarar como un arreglo de caracteres. En el siguiente
ejemplo veremos cómo cambiar una palabra de minúsculas a mayúsculas, utilizando
cadenas de caracteres y pasando datos por referencia a una función.
El programa es el siguiente:
//pasar
a mayusculas
#include<iostream>
#include<cctype>//Biblioteca de manejo de caracteres. Para usar islower,
toupper
using std::cout;
using std::endl;
using std::islower;
using std::toupper;
//prototipo
void aMayusculas(char
*);
int main(){
char frase[] =
"programacion";
cout << "La frase
antes: " << frase << endl;
aMayusculas(frase);//se llama a
la funcion
cout << "La frase
despues: " << frase << endl;
return 0;
}
void aMayusculas(char *letra){
while(*letra != '\0'){
if(islower(*letra))//si letra es
minuscula...
*letra = toupper(*letra);//lo convierte
a mayuscula.
letra++;//mueve el
arreglo un espacio
}//fin while
}
Al ejecutar el programa, este es el resultado:
La función va procesando un carácter a la vez, hasta
que se encuentra con el carácter de fin de cadena o null '\0'.
Un arreglo de caracteres equivale a un puntero al
primer carácter del arreglo, por eso es que se puede utilizar como argumento
para la función. La función islower, recibe como un argumento una letra y
devuelve verdadero, en caso de que esta sea minúscula. Por el contrario, la
función toupper, recibe como argumento una letra y si la letra es minúscula,
devuelve la respectiva letra en mayúscula.
letra++, lo que hace es mover la ubicación al
siguiente elemento del arreglo. Esto es porque cuando se suma un valor a un
puntero que apunta a un arreglo, la dirección de memoria se modifica para poder
apuntar al siguiente elemento del arreglo.
Podemos modificar levemente el programa para permitir
que el usuario ingrese una palabra o frase. El programa quedaría de la
siguiente manera:
#include<iostream>
#include<cctype>
using
std::cout;
using
std::cin;
using
std::endl;
using
std::toupper;
using
std::islower;
//prototipo
void
mayuscula(char *);
int main(){
char
frase[100];
cout
<< "Ingresa una palabra: ";
cin.getline(frase, 100);
mayuscula(frase);
cout
<< "Nueva frase: " << frase << endl;
return
0;
}
void
mayuscula(char *letra){
while(*letra != '\0'){
if(islower(*letra)){
*letra
= toupper(*letra);
}//fin if
letra++;
}//fin while
}
En este caso se utilizó la función cin.getline()
para poder procesar frases y no simples palabras.
Gustavo J. Cerda Nilo
Diciembre 2017
No hay comentarios:
Publicar un comentario