elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con strings y punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con strings y punteros  (Leído 7,664 veces)
Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Duda con strings y punteros
« en: 31 Octubre 2014, 22:41 pm »

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
  1. /// PUNTEROS ///
  2.  
  3. #include <iostream>
  4.  
  5. using std::cout;
  6. using std::cin;
  7. using std::endl;
  8.  
  9. // Aritmetica de punteros
  10.  
  11. int main()
  12. {
  13.   cout << "Aritmetica de punteros:\n\n";
  14.  
  15.   int V[10] = {5,4,3,2,1};  //Declaramos arreglo de tipo int y lo inicializamos
  16.   int *p1 = V;             // asignamos un puntero de tipo int que apunte al arreglo 'V'
  17.  
  18.   // De esta manera solo estamos apuntando hacia el valor del primer indice del arreglo
  19.   // en este caso seria el indice 0 que contiene el valor de 5.
  20.   cout << "El valor del indice 0 del arreglo: " << *p1 << endl;
  21.   cout << "La direccion del indice 0 del arreglo: " << p1 << endl;
  22.  
  23.   cout << "\nAccedemos a cada uno de los valores del arreglo con el puntero \n\n";
  24.   cout << "Valor del indice 1: " << *(p1 + 1) << " y su direccion es: " << p1+1 << endl;
  25.   cout << "Valor del indice 2: " << *(p1 + 2) << " y su direccion es: " << p1+2 <<endl<<endl;
  26.  
  27.   cout << "Para recorrer todo el arreglo con punteros lo hago con un ciclo \n\n";
  28.   for(int i=0 ; i<10 ; i++)
  29.   {
  30.      cout << *(p1 + i) << endl; // imprimo los valores del arreglo
  31.   }
  32.  
  33.   return 0;
  34. }
  35.  

Código
  1. /// PUNTEROS ///
  2.  
  3. #include <iostream>
  4.  
  5. using std::cout;
  6. using std::cin;
  7. using std::endl;
  8.  
  9. int main()
  10. {
  11.   cout << "Recorrer cadena de caracteres con punteros:\n\n";
  12.  
  13.   cout << "Cadena = PUNTEROS \n";
  14.  
  15.   char cadena[] = {'P','U','N','T','E','R','O','S','\0'};
  16.  
  17.   char *p1 = cadena; // Declaro un puntero que apunte a cadena
  18.  
  19.   while(*p1 != '\0')  // Cilo mientras que llegamos al final de la cadena
  20.   {
  21.      cout << *p1 << endl;  // Imprimo cada caracter de la cadena
  22.      p1++;                 // incremento en cada iteracion la direccion de memoria de cada caracter.
  23.   }
  24.  
  25.   return 0;
  26. }
  27.  


De antemano. Muchas Gracias por su colaboracion



En línea

:D  ::::Ja_90::::   :D
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con strings y punteros
« Respuesta #1 en: 31 Octubre 2014, 23:53 pm »

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


En línea

Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Re: Duda con strings y punteros
« Respuesta #2 en: 1 Noviembre 2014, 03:07 am »

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
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using std::cout;
  5. using std::string;
  6.  
  7. int main ()
  8. {
  9.   cout << "Recorrer una cadena tipo string mediante punteros\n\n";
  10.  
  11.   string str ("HELLO WROLD");    // Declaro y asigno la cadena "HELLO WORLD" a la variable srt de tipo string
  12.  
  13.   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
  14.  
  15.   strcpy (p1, str.c_str());  // Copio la cadena srt en la direccion de memoria del puntero p1
  16.  
  17.   while (*p1!='\0')  // recorro la cadena hasta que encuentre el caracter nulo '\0'
  18.   {
  19.      std::cout << *p1 << '\n';  // imprimo cada caracter de la cadena asignada al puntero p1
  20.  
  21.      p1++;                      // incremento la direccion de memoria de cada caracter de la cadena.
  22.   }
  23.  
  24.  return 0;
  25. }
  26.  

Paso de string a char y viceversa:

Código
  1.  
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using std::cout;
  6. using std::string;
  7.  
  8. int main()
  9. {
  10.   string sCadena;           //Declaro variable tipo string
  11.  
  12.   // paso de char* a string
  13.  
  14.   cout << "Paso de cadena a string \n\n";
  15.  
  16.   char szCadena[10] = "adios";   // Declaro y asigno cadena "adios" a variable szCadena de tipo char
  17.  
  18.   cout << "Cadena tipo char: " << szCadena << endl;
  19.  
  20.   sCadena = szCadena;            // a la variable sCadena de tipo string le asigo el contenido de la variable szCadena de tipo char
  21.  
  22.   cout << "Cadena tipo string: " << sCadena << endl;  // Imprime "adios"
  23.  
  24. //-------------------------------------------------------------------------------------------------//
  25.  
  26.   cout << "\nPaso de string a char*\n\n";
  27.  
  28.   // Paso de string a char*
  29.  
  30.   sCadena = "HELLO";             // Asigo a la variable sCadena de tipo string la cadena "HELLO"
  31.  
  32.   // COPIO mediante la funcion strcpy la cadena de la variable sCadena de tipo string en forma de char*
  33.   // en la variable szCadena mediante c_str().
  34.  
  35.   //// copio la cadena "HELLO" de la variable sCadena de tipo string en la variable de tipo char (szCadena
  36.  
  37.   strcpy(szCadena,sCadena.c_str());
  38.  
  39.   cout << "Cadena convertida en char: " << szCadena << endl;  // Imprime "HELLO".
  40.  
  41.   return 0;
  42. }
  43.  
En línea

:D  ::::Ja_90::::   :D
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda - Strings
Programación Visual Basic
h0oke 3 2,427 Último mensaje 23 Septiembre 2009, 01:11 am
por W0lFy
Duda comparación de strings
.NET (C#, VB.NET, ASP)
BlaineMonkey 2 2,716 Último mensaje 23 Febrero 2010, 10:29 am
por BlaineMonkey
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,924 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Duda sobre programa en C con STRINGS
Programación C/C++
elWartix 7 2,333 Último mensaje 10 Marzo 2016, 09:31 am
por MAFUS
Confusión: arreglo de arreglo de strings (o con punteros)
Programación C/C++
Skali 3 2,146 Último mensaje 18 Mayo 2018, 19:22 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines