sábado, 9 de diciembre de 2017

C++ Los punteros y las cadenas char



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

https://codigogx.blogspot.cl/2017/11/c-punteros-en-funciones.html https://codigogx.blogspot.cl/2018/01/c-el-operador-sizeof.html

No hay comentarios:

Publicar un comentario

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...