Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Parametro por referencia de una cadena

Estas en el tema de Parametro por referencia de una cadena en el foro de C/C++ en Foros del Web. La pregunta seria como el titulo como seria el codigo ( cualquier codigo) pero que se explique como se pasa por referencia el contenido de ...
  #1 (permalink)  
Antiguo 06/11/2012, 05:59
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 5 meses
Puntos: 1
Pregunta Parametro por referencia de una cadena

La pregunta seria como el titulo como seria el codigo ( cualquier codigo) pero que se explique como se pasa por referencia el contenido de una variable char * y se muestre, dicho de otra manera que en el main se ingrese un nombre ese nombre se debe guardar en una variable char* y luego por referencia enviar la frase o palabra que se yo a una funcion que lo unico que haga es un cout y muestre el nombre
Espero sus respuestas porque cuando pregunto algo veo 200 vistas y 1 respuesta xD .saludos.
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #2 (permalink)  
Antiguo 06/11/2012, 07:15
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Parametro por referencia de una cadena

Tan simple como que la función acepte como entrada un char*
  #3 (permalink)  
Antiguo 06/11/2012, 09:18
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Parametro por referencia de una cadena

Acá te dejo un ejemplo:
Declaramos 2 variables de tipo char, y la otra char*, en la que debes ingresar 2 frases. Y estas se mandan a una función que tiene un parámetro char* que coloca todo el texto pasado como parámetro en mayúsculas. Y finalmente escribimos los textos convertidos, pero no en la función, sino que en main().

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. //Funcion:
  9. void fraseMayusculas(char*);
  10.  
  11. int main()
  12. {
  13.     char texto[120];
  14.     char *ptexto2[120]; //Puntero de char
  15.  
  16.     cout << "Introduzca frase" << endl;
  17.     cin.getline(texto, 120);
  18.  
  19.     cout << "Introduzca frase Puntero" << endl;
  20.     cin.getline(*ptexto2, 120);
  21.     cout << endl;
  22.  
  23.     cout << "Sus textos:" << endl<<endl;
  24.     cout << "Texto1: " << texto << endl << endl;
  25.     cout << "Texto2: " << *ptexto2 << endl << endl;
  26.     cout << endl;
  27.     //Convertimos todo a Mayuscula:
  28.     //No se pasa como &texto
  29.     //A menos que sea un elemento, por ej  &texto[3]
  30.     fraseMayusculas(texto);
  31.     //Pasamos el puntero a la funcion:
  32.     fraseMayusculas(*ptexto2);
  33.  
  34.     //Escribimos texto convertido:
  35.     cout << "Sus textos convertidos:" << endl << endl;
  36.     cout << "Texto1: " << texto << endl << endl;
  37.     cout << "Texto2: " << *ptexto2 << endl << endl;
  38.  
  39.  
  40.     getche();
  41.     return 0;
  42. }
  43.  
  44. void fraseMayusculas(char *frase){
  45.     for (int x = 0; x < 120; x++ )
  46.         if (isalpha(frase[x]))
  47.             frase[x] = toupper(frase[x]);
  48. }
  #4 (permalink)  
Antiguo 06/11/2012, 17:40
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Parametro por referencia de una cadena

Cita:
Iniciado por cotolon Ver Mensaje
Acá te dejo un ejemplo:
Declaramos 2 variables de tipo char, y la otra char*, en la que debes ingresar 2 frases. Y estas se mandan a una función que tiene un parámetro char* que coloca todo el texto pasado como parámetro en mayúsculas. Y finalmente escribimos los textos convertidos, pero no en la función, sino que en main().

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. //Funcion:
  9. void fraseMayusculas(char*);
  10.  
  11. int main()
  12. {
  13.     char texto[120];
  14.     char *ptexto2[120]; //Puntero de char
  15.  
  16.     cout << "Introduzca frase" << endl;
  17.     cin.getline(texto, 120);
  18.  
  19.     cout << "Introduzca frase Puntero" << endl;
  20.     cin.getline(*ptexto2, 120);
  21.     cout << endl;
  22.  
  23.     cout << "Sus textos:" << endl<<endl;
  24.     cout << "Texto1: " << texto << endl << endl;
  25.     cout << "Texto2: " << *ptexto2 << endl << endl;
  26.     cout << endl;
  27.     //Convertimos todo a Mayuscula:
  28.     //No se pasa como &texto
  29.     //A menos que sea un elemento, por ej  &texto[3]
  30.     fraseMayusculas(texto);
  31.     //Pasamos el puntero a la funcion:
  32.     fraseMayusculas(*ptexto2);
  33.  
  34.     //Escribimos texto convertido:
  35.     cout << "Sus textos convertidos:" << endl << endl;
  36.     cout << "Texto1: " << texto << endl << endl;
  37.     cout << "Texto2: " << *ptexto2 << endl << endl;
  38.  
  39.  
  40.     getche();
  41.     return 0;
  42. }
  43.  
  44. void fraseMayusculas(char *frase){
  45.     for (int x = 0; x < 120; x++ )
  46.         if (isalpha(frase[x]))
  47.             frase[x] = toupper(frase[x]);
  48. }
Es necesario que el *ptexto2 al declararlo le pongas [] ? no puede ser simplemente *ptexto2? osea se puede hacer esto? *ptexto2="blabla";
y ese *ptexto2 pasar por referencia a una funcion que lo unico que haga sea mostrar la palabra blablabla? es posible? y si es quisiera saber como porque me sigo partiendo la cabeza con eso y en internet no encuentro nada de eso xD saludos
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #5 (permalink)  
Antiguo 06/11/2012, 18:17
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Parametro por referencia de una cadena

Disculpa la demora, en ese caso sería así :

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. void mostrarTexto(char*); //Funcion parametro NO puntero
  6. void mostrarTextoPuntero(char*); // Funcion parametro SI puntero
  7.  
  8. int main()
  9. {
  10.  
  11.     char *pTexto = "bla bla";
  12.  
  13.     cout << pTexto << endl;
  14.     mostrarTexto(pTexto);
  15.     mostrarTextoPuntero(pTexto);
  16.  
  17.  
  18.     getche();
  19.     return 0;
  20. }
  21.  
  22. void mostrarTexto(char frase[]){
  23.     cout << endl << frase << endl;
  24. }
  25.  
  26. void mostrarTextoPuntero(char *frase){
  27.     cout << endl << frase << endl;
  28. }
  #6 (permalink)  
Antiguo 06/11/2012, 19:33
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 5 meses
Puntos: 1
Pregunta Respuesta: Parametro por referencia de una cadena

Cita:
Iniciado por cotolon Ver Mensaje
Disculpa la demora, en ese caso sería así :

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. void mostrarTexto(char*); //Funcion parametro NO puntero
  6. void mostrarTextoPuntero(char*); // Funcion parametro SI puntero
  7.  
  8. int main()
  9. {
  10.  
  11.     char *pTexto = "bla bla";
  12.  
  13.     cout << pTexto << endl;
  14.     mostrarTexto(pTexto);
  15.     mostrarTextoPuntero(pTexto);
  16.  
  17.  
  18.     getche();
  19.     return 0;
  20. }
  21.  
  22. void mostrarTexto(char frase[]){
  23.     cout << endl << frase << endl;
  24. }
  25.  
  26. void mostrarTextoPuntero(char *frase){
  27.     cout << endl << frase << endl;
  28. }
Si sale aunque en el primer mostrartexto la funcion la declaras como puntero y en la implementacion de esta como array, porque? y otra cosa que me he dado cuenta es que cuando quieres ingresar el bla bla por teclado ahi si no funciona como se soluciona eso?
osea
int main()
{

char *pTexto;
cin>>pTexto; //con esa linea no funciona

cout << pTexto << endl;
mostrarTexto(pTexto);
mostrarTextoPuntero(pTexto);


getche();
return 0;
}
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #7 (permalink)  
Antiguo 06/11/2012, 19:40
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Parametro por referencia de una cadena

Lo del mostrarTexto(char*), aunque el frase[] no sea un puntero, debes colocarlo siempre que sea una función prototipo, en el caso de que no sea prototipo y esté arriba de main(), debes colocarlo así no mas :
void mostrarTexto(char frase[]){
//Aqui va lo de adentro
}

Y el tema de ingresar texto a puntero sería así:

char *pTexto;
cin.getline(pTexto, 120);

Ya que el cin solo te toma hasta el primer espacio (generalmente), para frases es preferible usar getline
  #8 (permalink)  
Antiguo 06/11/2012, 21:35
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Parametro por referencia de una cadena

Hola, si estás programando en C++ deberías utilizar la clase string a menos que sea una situación muy específica, lo que pasa la mayoría de las veces es que se utiliza el compilador de C++ sólo para compilar código al estilo C, el resultado es que no se aprovechan las características propias del lenguaje.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. void hello(const string& name){
  6.     cout << "Hello " << name << endl;
  7. }
  8.  
  9. int main(){
  10.     string name;
  11.     cout << "Enter a name: ";
  12.     getline(cin, name);
  13.     hello(name);
  14.  
  15.     return 0;
  16. }

Varias veces se han abierto temas similares por lo que con una buena búsqueda podrías evitarte la falta de respuestas.

Saludos.

Etiquetas: funcion, parametro, referencia, variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:03.