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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Imprimir una cadena con puntero sin utilizar un bucle.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Imprimir una cadena con puntero sin utilizar un bucle.  (Leído 2,515 veces)
Dano1952

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Imprimir una cadena con puntero sin utilizar un bucle.
« en: 31 Mayo 2018, 20:53 pm »

Hola ¿como están? .
Tengo una dificultad en este programita que por mas que repaso manuales y busco en la web no logro dar con la tecla, mi pregunta es porque no puedo imprimir la frase invertida con un simple printf %s,

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5. char cadena[]="Rosa y Yiyi", tmp[12]="";
  6. char *p = cadena;
  7. char *t = tmp;
  8. int i, j, lar;
  9.  
  10. printf ( "\n %s\n", p );
  11. lar = strlen(p);
  12.  
  13. for (i=lar,j=0; i>=0; i--,j++){
  14. *(t+j) = *(p+i);
  15. }
  16.  
  17. for (i=0; i<=lar; i++){
  18. printf ( "%c", *(t+i) );
  19. }
  20.  
  21. printf ( "\n" );
  22.  
  23. return 0;
  24. }

Esta parte es la que quiero reemplazar y no lo logro.
Código
  1. for (i=0; i<=lar; i++){
  2. printf ( "%c", *(t+i) );
  3. }
  4.  

Me podrían decir donde estoy fallando?

Dano.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.602



Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #1 en: 31 Mayo 2018, 22:58 pm »

Usa recursión:
Haz una función que reciba una dirección de memoria a un char. Haz que si la actual posición tenga algo (no sea '\0') se llame a si misma pero con la siguiente posición a la recibida y después escriba el carácter que hay en la posición actual. Si no hay nada (hay un '\0') simplemente que regrese.

Llamando a esta función con una cadena la escribirá al revés.


En línea

Dano1952

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #2 en: 1 Junio 2018, 00:34 am »

Gracias por responder, de acuerdo, una sola cosita mas, no podes darme algo de teoría de porque no se puede.

Saludos.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.314


Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #3 en: 1 Junio 2018, 04:00 am »

Claro.
Es cosa del diseño, directamente no se puede imprimir toda la cadena al revés, porque no está implementada dicha función de forma nativa.

Un string se compone de muchos caracteres. Luego cuando se manda imprimir, (a bajo nivel) se imprime de uno en uno. Cualquier función que imprime una cadena en cualquier lenguaje siempre usa un bucle, imprimiendo uno a uno los caracteres...

Qué problema tienes en recorrer el bucle desde el final al principio, imprimiendo cada vez un carácter...?.

Crea una funcion, que haga lo mismo pero al revés, la llamas printReversef, la invocas igual que printf y listo...

Código:
funcion PrintReverse(char[] Cadena, otros parametros que quieras usar)
    entero j, k
   
    j = tamaño de Cadena

    bucle para k desde j-1 hasta 0 retrocediendo
        imprimr caracter cadena[k]
    fin bucle
fin funcion

No veo necesario que hagas un réplica del contenido... solo imprime carácter a carácter, pero empezando por el final y retrocedeidno.

Hacerlo recursivo, en vez de iterativo, consume más recursos y es más lento, y para algunos menos evidente su funcionamiento (básicamente no queda tan claro cuando finaliza, como un bucle for).
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.602



Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #4 en: 1 Junio 2018, 07:28 am »

Bueno, lo hice iterativo por petición suya de no usar bucles, o eso creí haber leído en el momento de dar respuesta.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.314


Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #5 en: 1 Junio 2018, 15:07 pm »

Claro, Mafus... yo entendí en primer lugar lo mismo...

...al final me quedó claro, que su problema era que no entendía el funcionamiento, de la función, que de alguna manera ve la función como una instrucción atómica de un único paso.
En línea

Dano1952

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Imprimir una cadena con puntero sin utilizar un bucle.
« Respuesta #6 en: 1 Junio 2018, 17:03 pm »

Sólo si estuvieran sentado frente a mi compu notarían la satisfacción que me causo la explicación de Ud. todo perfecto todo entendido, todo claro.- ;-) ;-) ;-)
Dano.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cadena estatica al devolver puntero de cadena.
Programación C/C++
alem29 2 3,168 Último mensaje 5 Febrero 2012, 23:38 pm
por eleon
Devolver puntero a cadena en función
ASM
silver2050 2 2,688 Último mensaje 22 Mayo 2013, 00:31 am
por silver2050
Como devolver puntero con cadena vacia
Programación C/C++
Destro- 6 3,361 Último mensaje 17 Marzo 2014, 22:30 pm
por Eternal Idol
Que diferencia hay en utilizar bucle for o while en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 10 5,635 Último mensaje 20 Mayo 2016, 16:17 pm
por HardForo
C++ puntero a arreglo bidimensional parar imprimir contenido
Programación C/C++
aurquiel 4 4,985 Último mensaje 18 Noviembre 2016, 20:25 pm
por aurquiel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines