[ Foro de Pascal ]

pregunta con copy?

28-Feb-2012 11:14
oscar gomez
1 Respuestas

Cordial saludo profesor Nacho y gracias siempre por tu ayuda y tu tiempo.
profesor tengo una duda respecto a la funcion copy y es refrente a este caso:

si tengo definidas porejemplo las siguientes variables:


var cadena,letra:string;
    caract:char;

 si hago:
 letra:= copy(cadena,1,1);
 caract:= copy(cadena,1,1);

por que en la segunda asignacion(caract:= copy(cadena,1,1);) obtengo el error type mismatch ?

pues en mi parecer copy devuelve una subcadena, y corrigeme por que no lo comprendo, un caracter puede ser porejempo 'a', acaso esto no se podria tomar como una cadena de un solo caracter?
como ves en el ejemplo en los dos casos el copy esta extrayendo una de la letras (especificamente la primera) de cadena , que diferencia hay entonces y por que del error y COMO PODRIA ENTONCES ALMACENAR UNA CARACTER DE UNA CADENA SI ES QUE NO SE PUEDE USAR COPY ? pues necesito porejemplo poder hacer luego una asignacion como la siguiente:

cadena2:=' ';
cadena2:=cadena2+caract;

donde cadena2:string;

no se supone que en este caso yo puedo ir digamos por cada pasada de un ciclo for porejemplo, ir almacenando en cadena2 un string, porejemplo:

i:=1(pasada1)
cadena2:= ' ' + 'a'

i:=2(pasada2)
cadena2:='a' + 'b' //no seria esto ya un string 'ab' ???
por que pascal da un error type mismatch


mil gracias por tu ayuda.

 


28-Feb-2012 14:42
Nacho Cabanes (+30)

Efectivamente, "copy" devuelve una subcadena, luego tienes que almacenarlo en un dato de tipo string, necesariamente, aunque dé la casualidad de la cadena obtenida tenga sólo una letra de longitud (pero incluso en ese caso, sigue siendo una cadena, y no podrás guardar su valor en un carácter).

Puedes hacer cosas como:

var
 cadena,subcadena1,subcadena2:string;
 caract:char;

subcadena1:= copy(cadena,1,1);

subcadena2:= copy(cadena,1,1);
caract := sbcadena2[1];






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)