<div dir="ltr">hola ya resolví el ejercicio pero todavía tengo dudas...<div><br></div><div>por ejemplo la función recibe tres parámetros, no se si se pueda hacer con un sólo parámetro. pero la dificultad la tuve con la memoria dinámica </div><div><br></div><div>¿que pasaría si reservo memoria para una cadena dentro de un subrutina? </div><div><br></div><div>¿sigue existiendo al salir? </div><div><br></div><div>¿la puedo liberar en otro lado? creo que si pero no se como...</div><div><br></div><div>En otro orden de ideas para resolver el ejercicio tuve que crear un par de funciones más una para truncar la cadena y otra para añadir un caracter, esto también me gustaría saber si se puede mejorar y en que forma</div><div><br></div><div>las tres funciones quedaron de esta manera:</div><div><br></div><div>esta es la que invierte la cadena obviamente</div><div><div>char *voltea(char* cad, char* inv, char* aux) //cad: la cadena que se va a invertir inv: el resultado  aux: para partir la cadena</div><div>{</div><div><span class="" style="white-space:pre">        </span>int ind = strlen(cad);</div><div><span class="" style="white-space:pre">     </span>ind--;</div><div><span class="" style="white-space:pre">     </span>if(0 < ind)</div><div><span class="" style="white-space:pre">     </span>{</div><div><span class="" style="white-space:pre">          </span>return voltea(strtrc(cad,aux),stradd(inv,cad[ind]),aux);</div><div><span class="" style="white-space:pre">   </span>}</div><div><span class="" style="white-space:pre">  </span>stradd(inv,cad[ind]);</div><div><span class="" style="white-space:pre">      </span>return inv;</div><div>};</div><div>///////////////////////////////////////////////////////////////////////////////</div><div><br></div><div>esta función sirve para partir truncar la cadena conservo la original y paso la cadena truncada como retorno y en el parámetro</div><div><br></div><div>char *strtrc(char *cad, char *aux)</div><div>{</div><div><span class="" style="white-space:pre">       </span>//char *aux;</div><div><span class="" style="white-space:pre">       </span>int tam = strlen(cad);</div><div><span class="" style="white-space:pre">     </span>tam--;</div><div><span class="" style="white-space:pre">     </span>//aux = new char[tam];</div><div><span class="" style="white-space:pre">     </span>for (int i = 0; i < (tam); i++)</div><div><span class="" style="white-space:pre"> </span>{</div><div><span class="" style="white-space:pre">          </span>strcpy(&aux[i],&cad[i]);</div><div><span class="" style="white-space:pre">           </span>if (i = tam)</div><div><span class="" style="white-space:pre">               </span>{</div><div><span class="" style="white-space:pre">                  </span>strcpy(&aux[i],"\0");</div><div><span class="" style="white-space:pre">                </span>}</div><div><span class="" style="white-space:pre">  </span>}</div><div><span class="" style="white-space:pre">  </span>return aux;</div><div>};</div><div>////////////////////////////////////////////////////////////////////////////////</div><div><br></div><div>con esta función añado un caracter a la cadena y el caracter nulo</div><div><br></div><div>char *stradd(char *cad, char c)</div><div>{</div><div><span class="" style="white-space:pre">      </span>int sz = strlen(cad);</div><div><span class="" style="white-space:pre">      </span><span style="white-space:pre">cad[sz] = c;
        cad[sz+1] = '\0';</span>;</div><div><span class="" style="white-space:pre"> </span>return cad;</div><div>}</div></div><div><br></div><div><br></div><div>el ejercicio logra lo que se planteo pero no se si es necesario escribir tanto código me siento </div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 13 de marzo de 2016, 18:36, Salvador Pozo <span dir="ltr"><<a href="mailto:salvapozo@gmail.com" target="_blank">salvapozo@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El pasado 2016-03-13 18:16:36, yolmer escribió:<br>
<br>
y> Hola lista:<br>
y> me topé con un ejercicio de recursividad que no he logrado realizar de la<br>
y> forma que quiero el enunciado es:<br>
<br>
Hola:<br>
<br>
Te comento sobre tu propuesta.<br>
<br>
y> int voltea( char *c)<br>
<br>
Piensa que para poder usar recursividad, la función debería retornar un objeto del mismo tipo que el parámetro, en este caso, una cadena. El parámetro puede ser (y debería) una cadena constante, pero el valor de retorno no tiene por qué.<br>
<br>
y> {<br>
y> if (strlen(c) > 1)<br>
y> {<br>
y> voltea(c+1);<br>
y> cout << c[0] << " ";<br>
<br>
Um, la idea es que la función devuelva la cadena al revés, no que la muestre en pantalla.<br>
La forma recursiva de voltear una cadena es, dividir la cadena en dos:<br>
- Una cadena de un carácter, formada por el primer carácter de la cadena a voltear.<br>
- Una cadena con el resto, que se usará como argumento recursivo.<br>
El retorno de "Voltear(cadena2)" se debe concatenar con cadena1.<br>
<br>
y> return 0;<br>
y> }<br>
<br>
y> cout <<  c << " ";<br>
y> return 0;<br>
y> }<br>
<br>
El segundo intento va mejor encaminado, pero te queda corregir algunas cosillas.<br>
Por ejemplo voltea(c+1) no tiene sentido, no se puede sumar 1 a una cadena.<br>
Otro error es que concatenar c, y &c[0] concatena dos veces la cadena c, no la voltea de ninguna forma.<br>
<br>
Piensa un poco más, creo que estás cerca de la solución, y me consta que preferirías encontrala por ti mismo. ¡Ánimo!<br>
<br>
Hasta pronto.<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" rel="noreferrer" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" rel="noreferrer" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br></div>