PDA

Ver la versión completa : Problema en acceso directo a un caracter perteneciente a una cadena.



fbustamante
15/03/2010, 07:01
Hola compañeros.

Sigo haciendo mis pinitos con Bennu y estoy intentado hacer una cosa que no se si se puede.

Intento acceder directamente a un caracter determinado de una variable del tipo string y no se si es que no se, o es que no se puede.

Un ejemplo:

string prueba="pelaez"; //Esta sería la variable inicializada.

say(prueba[2]); //Con esto me da directamente la "l" de "pelaez";


He descubierto que con el modelo: "variable[coeficiente]" accedo directamente, pero no hay forma de modificarlo.

Si hago prueba[2]="x";

Bennu me da el error de "se necesita una variable", o algo así.

También he intentado "hacer trampas" usando punteros que apunten a la variable, pero nanai. No tengo pantalones de conseguir un puntero que me apunte a ninguna letra.

Todo esto lo estoy intentado porque el uso de las funciones de tratamiento de cadena de Bennu me elentencen mucho el programa, y yo sólo quiero poder cambiar letras en un string ya fijo, pero que por fuerza tiene que ser string.

Recapitulo, tengo un string, y tengo que devolver ese string modificado, no me vale cambiar el string por array ni otra cosa. Me vale cualquier cambio intermedio, pero al final es ese string el que tengo que asignar.

Gracias y saludos.

Drumpi
15/03/2010, 13:43
No estoy seguro, pero intenta hacer:
prueba[2]='x';
Usando la "tilde" que hay al lado del cero, bajo la interrogación (si tienes un teclado español, claro). Las dobles comillas indican una string, no un dato char, que es lo que te está pidiendo.

Si no, tendrás que usar substr para dividir la cadena y meter el dato en medio, creo que sería algo así:

prueba=substr(prueba,0,1)+"x"+substr(prueba,3,-1);
Los valores creo que indicaban la letra inicial/final, pero si usas valores negativos, cuenta desde el final (el -1 es para que llegue hasta la última letra).

fbustamante
16/03/2010, 12:26
Gracias, pero no va.

El problema esta en que bennu no me reconoce como variable al string cuando intento escribir en ella de la forma string[x], pero sin embargo me deja leer.

Con substr ya tengo la rutina echa y va bastante lenta, es por eso que intento acceder a las letras de la string directamente, algo así como utilizando punteros o arrays, pero no lo consigo.

Por favor, que alguien me diga si se puede o no. Si en un par de dias no lo consigo dejaré la rutina tal como está y continuaré con el desarrollo.

A ver si doy por acabada la primera vesión beta de una vez y la publico...

Por cierto, se que no lo he comentado. Se trata de un simple visor de texto plano, para no tener que ir al pc a leer los readme y los ini en la wiz.

Hokutoy
16/03/2010, 12:37
Gracias, pero no va.

El problema esta en que bennu no me reconoce como variable al string cuando intento escribir en ella de la forma string[x], pero sin embargo me deja leer.

Con substr ya tengo la rutina echa y va bastante lenta, es por eso que intento acceder a las letras de la string directamente, algo así como utilizando punteros o arrays, pero no lo consigo.

Por favor, que alguien me diga si se puede o no. Si en un par de dias no lo consigo dejaré la rutina tal como está y continuaré con el desarrollo.

A ver si doy por acabada la primera vesión beta de una vez y la publico...

Por cierto, se que no lo he comentado. Se trata de un simple visor de texto plano, para no tener que ir al pc a leer los readme y los ini en la wiz.

Prueba tambien a postear la duda en el foro oficial de Foro oficial de Bennu (http://forum.bennugd.org/index.php?board=4.0)
A parte de grandes expertos esta Splinter el "creador" del mismo... si ellos no lo saben entonces si que esta chunga la cosa jejeje

fbustamante
16/03/2010, 12:53
Esto es rapidez. Payavoy.

Drumpi
16/03/2010, 13:48
Pues si eso no te ha funcionado, no se, espero que alguien tenga más idea que yo, porque siempre he usado las cadenas así.
Ten en cuenta que las STRINGS en realidad es un tipo de dato que se implementa como una "clase", es decir, sólo puedes trabajar con ellas usando las funciones específicas, ya que es un array dinámico de chars.

Si 'x' no te vale, prueba con ASC("x"). ASC es una función que devuelve el código ASCII del primer valor de la cadena que le pasas por parámetro.
De todas maneras, si usas sólo una fuente, y esta tiene el mismo tamaño para todas las letras, puedes usar un array de CHARs en lugar de STRINGs. No sé, es una idea.

SplinterGU
16/03/2010, 17:12
debido al tipo de datos que es una string, esto solo es una facilidad para la lectura... si queres modificar usando el metodo de array, quizas te convenga usar char[] en vez de string.

saludos

fbustamante
16/03/2010, 22:26
Gracias a todos por las repuestas, hare el último intento con arrays de char.

Por cierto, he sido muy bien recibido en los foros de Bennu, y desde aquí doy también las gracias y en especial a SplinterGu, que está en todas partes. :D

GameMaster
16/03/2010, 23:20
Hola fbustamante :)

Drumpi
17/03/2010, 01:14
Gracias a todos por las repuestas, hare el último intento con arrays de char.

Por cierto, he sido muy bien recibido en los foros de Bennu, y desde aquí doy también las gracias y en especial a SplinterGu, que está en todas partes. :D

Más de uno está en todas partes, lo que no voy a hacer es responderte lo mismo en los dos sitios, con una vez creo que ya es suficiente ¿no? :D:D:D

fbustamante
17/03/2010, 10:22
OIDO COCINA!.

(Desde luego, no perdonais ni una...):D