Título: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 4 Julio 2011, 19:29 pm Buenas a todos,estoy intentando emular la cadena strtok para que pida un caracter de la frase y lo elimine de esa cadena,quedando la cadena final sin ese caracter,lamentablemente me sale este error:
Código: In function 'void cortarcadena(char*, char*)': He ido cambiando cosas pero no se donde está el fallo,tiene que ver con asignar una cadena a un caracter,pero lo que asigno es un caracter a un caracter,pego el codigo: Código
Gracias al que pueda ayudarme. Salu2 Título: Re: Emular una funcion de una cadena Publicado por: leogtz en 4 Julio 2011, 19:36 pm El problema es que no puedes asignar un array a un puntero (o indireccionando el puntero). Dinos que querías hacer para poder decirte qué hacer.
Saludos. Título: Re: Emular una funcion de una cadena Publicado por: Dark Invader en 4 Julio 2011, 19:44 pm Gracias por contestar Leo,
Mira lo que queria hacer es asignar un puntero al principio de la cadena,e ir recorriendola con el *p++,es decir,que fuera al siguiente elemento,el problema es ese,que no se a que es debido,porque he hecho otra funcion,la strcmp y me funciona perfecto: Código
¿A qué crees que puede ser debido? :huh: Salu2 Título: Re: Emular una funcion de una cadena Publicado por: El_Java en 4 Julio 2011, 19:44 pm Hola, en un rato de aburrimiento te he hecho una función como la que pides porque creo que has hecho una montaña de un granito de arena.
Todo esta hecho con las librerias standar del http://www.cplusplus.com/ (http://www.cplusplus.com/), si quieres info del codigo preguntame o miralo ahi. Mi código lo que hace es eliminarte un sólo caracter de la frase que le pases, se puede hacer con mas de una letra, pero no me apetecia complicarme. Aqui te dejo el codigo: Código
Un saludo! Título: Re: Emular una funcion de una cadena Publicado por: Dark Invader en 4 Julio 2011, 19:48 pm Hola El_Java y gracias por contestar tambien,
El problema es que no domino muy bien C++ todavia,y queria que mi codigo fuera en C,porque las cadenas en C++ no la tengo muy controladas,solo queria ver exactamente donde esta el fallo de mi codigo. De todas maneras muchas gracias. Salu2 Título: Re: Emular una funcion de una cadena Publicado por: leogtz en 4 Julio 2011, 19:51 pm Mira lo que queria hacer es asignar un puntero al principio de la cadena,e ir recorriendola con el *p++,es decir,que fuera al siguiente elemento Así es, pero bueno, el error está aquí: Código: c_ori=*p; Título: Re: Emular una funcion de una cadena Publicado por: Dark Invader en 4 Julio 2011, 20:05 pm Resuelto,era lo que habias dicho Leo,esta poniendo una cadena pero no le estaba poniendo el numero de argumentos,y no los incrementaba,por eso he hecho un nuevo puntero a la cadena origen y ahora si compila,muchas gracias colega :P
Código
Tema resuelto ::) Salu2 Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: leogtz en 4 Julio 2011, 22:59 pm @Dar Invader
He probado la función, funciona (valga la redundancia), hay cosas que comentar, en primera está el indentado del código, está muy mal, debes corregirlo. Y la función se puede acortar a esto (usando tu manera): Código
Código
Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 4 Julio 2011, 23:06 pm Tienes toda la razon,se puede acortar muchisimo,y parece mucho mas ordenador,gracias de nuevo colega ;D
Salu2 Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: leogtz en 4 Julio 2011, 23:14 pm Aún te puedes ahorrar una variable, no hace falta que maniobres el caracter con un puntero ya que es una sola unidad, lo puedes omitir.
Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 4 Julio 2011, 23:36 pm ¿Te refieres a...
Código
He unido la cadena al puntero r :silbar: Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: leogtz en 4 Julio 2011, 23:44 pm Me refería a esto:
Código
Ok, una última: Código
:D Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 5 Julio 2011, 00:24 am Nunca habia visto usar el for asi:
Código
¿Se puede utilizar la ultima fila del for con todo eso? :-\ Es que nunca lo habia utilizado asi... Gracias por las formas,estoy tomando nota de todas ::) Salu2 Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: leogtz en 5 Julio 2011, 00:28 am Nunca habia visto usar el for asi: Código
¿Se puede utilizar la ultima fila del for con todo eso? :-\ Sí, queda medio críptico el código, pero más corto, pero pierde legibilidad :) Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 5 Julio 2011, 00:32 am Una ultima cosa Leo,perdon por alargar el tema mas de la cuenta,no seria...:
for(; *p; caracter == *p ? c_temp = *p++ : (*r++ = *p++)); Es que *p=*p++ no me suena bien,a lo mejor he sido yo el que no lo he entendido... :xD Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: leogtz en 5 Julio 2011, 00:54 am Es que fíjate que en tu código c_temp no lo utilizas para nada (no tiene utilidad), así que con
Código: *p = *p++ Código
como no podemos poner: Código porque daría error, he utilizado: Código
Para que lo acepte el compilador. Título: Re: Emular una funcion de una cadena(Resuelto) Publicado por: Dark Invader en 5 Julio 2011, 01:02 am Es verdad,tienes toda la razon,la cadena c_temp la utilizaba como temporal,para pasar los argumentos que no servian y desecharlos de la cadena,pero asi mucho mejor,muchas gracias Leo,he aprendido muchas cosas. ::)
Gracias de nuevo,mirare de nuevo todo el tema para asimilarlo bien,ya que ha habido muchos cambios. :xD Salu2 |