Buenas, quisiera saber como declarar un puntero a un string de c++... para saber como recorrer el string.
Aca tengo la manera en que se deben usar los punteros con arreglos de tipo entero y con cadenas de tipo char... Pero...
Lo que quiero saber no es recorrer una cadena de tipo char[5] = {'H', 'E', 'L', 'L', 'O', '\0'};
sino una cadena de tipo string: string = "HELLO"; mediante el uso de punteros.
/// PUNTEROS ///
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
// Aritmetica de punteros
int main()
{
cout << "Aritmetica de punteros:\n\n";
int V[10] = {5,4,3,2,1}; //Declaramos arreglo de tipo int y lo inicializamos
int *p1 = V; // asignamos un puntero de tipo int que apunte al arreglo 'V'
// De esta manera solo estamos apuntando hacia el valor del primer indice del arreglo
// en este caso seria el indice 0 que contiene el valor de 5.
cout << "El valor del indice 0 del arreglo: " << *p1 << endl;
cout << "La direccion del indice 0 del arreglo: " << p1 << endl;
cout << "\nAccedemos a cada uno de los valores del arreglo con el puntero \n\n";
cout << "Valor del indice 1: " << *(p1 + 1) << " y su direccion es: " << p1+1 << endl;
cout << "Valor del indice 2: " << *(p1 + 2) << " y su direccion es: " << p1+2 <<endl<<endl;
cout << "Para recorrer todo el arreglo con punteros lo hago con un ciclo \n\n";
for(int i=0 ; i<10 ; i++)
{
cout << *(p1 + i) << endl; // imprimo los valores del arreglo
}
return 0;
}
/// PUNTEROS ///
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
cout << "Recorrer cadena de caracteres con punteros:\n\n";
cout << "Cadena = PUNTEROS \n";
char cadena[] = {'P','U','N','T','E','R','O','S','\0'};
char *p1 = cadena; // Declaro un puntero que apunte a cadena
while(*p1 != '\0') // Cilo mientras que llegamos al final de la cadena
{
cout << *p1 << endl; // Imprimo cada caracter de la cadena
p1++; // incremento en cada iteracion la direccion de memoria de cada caracter.
}
return 0;
}
De antemano. Muchas Gracias por su colaboracion
Muchas gracias
ivancea96Aqui dejo como lo hice por si a alguien mas le interesa.... ademas de otro codigo para pasar cadenas tipo char a string y viceversa. Saludos.
Recorrer una cadena tipo string mediante punteros:
#include <iostream>
#include <cstring>
using std::cout;
using std::string;
int main ()
{
cout << "Recorrer una cadena tipo string mediante punteros\n\n";
string str ("HELLO WROLD"); // Declaro y asigno la cadena "HELLO WORLD" a la variable srt de tipo string
char *p1 = new char [str.length()+1]; // Declaro puntero de tipo char...con la longitud de la cadena mas 1 que indica el caracter nulo
strcpy (p1, str.c_str()); // Copio la cadena srt en la direccion de memoria del puntero p1
while (*p1!='\0') // recorro la cadena hasta que encuentre el caracter nulo '\0'
{
std::cout << *p1 << '\n'; // imprimo cada caracter de la cadena asignada al puntero p1
p1++; // incremento la direccion de memoria de cada caracter de la cadena.
}
return 0;
}
Paso de string a char y viceversa:
#include <iostream>
#include <cstring>
using std::cout;
using std::string;
int main()
{
string sCadena; //Declaro variable tipo string
// paso de char* a string
cout << "Paso de cadena a string \n\n";
char szCadena[10] = "adios"; // Declaro y asigno cadena "adios" a variable szCadena de tipo char
cout << "Cadena tipo char: " << szCadena << endl;
sCadena = szCadena; // a la variable sCadena de tipo string le asigo el contenido de la variable szCadena de tipo char
cout << "Cadena tipo string: " << sCadena << endl; // Imprime "adios"
//-------------------------------------------------------------------------------------------------//
cout << "\nPaso de string a char*\n\n";
// Paso de string a char*
sCadena = "HELLO"; // Asigo a la variable sCadena de tipo string la cadena "HELLO"
// COPIO mediante la funcion strcpy la cadena de la variable sCadena de tipo string en forma de char*
// en la variable szCadena mediante c_str().
//// copio la cadena "HELLO" de la variable sCadena de tipo string en la variable de tipo char (szCadena
strcpy(szCadena,sCadena.c_str());
cout << "Cadena convertida en char: " << szCadena << endl; // Imprime "HELLO".
return 0;
}