Duda con strings y punteros

Iniciado por Ja_90, 31 Octubre 2014, 22:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Ja_90

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.

Código (cpp) [Seleccionar]

/// 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;
}


Código (cpp) [Seleccionar]

/// 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

:D  ::::Ja_90::::   :D

ivancea96

El método c_str() de la clase string retorna un puntero a char (const char*). Así puedes recorrerla como si fuese una cadena de caracteres normal..

Ja_90

Muchas gracias ivancea96

Aqui 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:

Código (cpp) [Seleccionar]

#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:

Código (cpp) [Seleccionar]


#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;
}
:D  ::::Ja_90::::   :D