Pascal/Turbo Pascal - Leer una cadena de caracteres.

 
Vista:

Leer una cadena de caracteres.

Publicado por Tate (5 intervenciones) el 06/12/2007 20:32:00
Mi problema es que no consigo leer una cadena de caracteres sin usar el tipo string. Lo estoy intentando con arrays de char. Esto es lo mas lejos que he llehago:

program leer_vector(Input,Output);
type
vector = packed array[1..10]of char;
var
i,j,lp :integer;
ok : boolean;
p : vector;
c:char;
begin
ok:=false;
repeat
for i:=1 to 10 do p[i]:='*';
writeln;
write('Introduzca la palabra a buscar: ');
i:=1;
repeat
read(c);
if c<>chr(10) then p[i]:=c;
i:=i+1;
until (c=chr(10)) or (i>10);

writeln;
if (p[2]='*') or (p[9+1]<>'*') then writeln('­Palabra no valida!')
else begin
ok:=true;
end;
writeln;
writeln;
for i:=1 to 10 do write(p[i]);
until ok;
readln;
end.

No consigo aclararme con el comportamiento de este progrma. Si aguien me puede ayudar se lo agradeceria mucho.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Leer una cadena de caracteres.

Publicado por Diego Romero (996 intervenciones) el 06/12/2007 23:43:03
¿Cuál es el objeto de este programa?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Leer una cadena de caracteres.

Publicado por Mechanic (177 intervenciones) el 07/12/2007 03:08:42
Hola Tate.
Yo lo haría así:

program leer_sin_string;
uses crt;
var
Caracter: char;
Cadena : string;
begin
Cadena := '';
ClrScr;
Writeln('Intruduzca una palabra');
repeat
if KeyPressed then
begin
Caracter := ReadKey;
Write(Caracter);
Cadena := Cadena + Caracter
end;
until Caracter = Char(13);
Writeln;
WriteLn(Cadena);
ReadKey
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una cadena de caracteres.

Publicado por TATE (5 intervenciones) el 07/12/2007 05:13:32
El objeto del programa es buscar en una sopa de letras una palabra. No se puede usar el tipo STRING para leer la palabra a buscar. Las sopas de letras vienen dadas en un fichero de texto. Pero, ese no es el problema. El problema viene cuando pretendo leer una cadena de CHAR por el Input del programa, me hace cosas raras. No me queda más remedio de usar STRING en esa parte del programa. Tengo que hacer el sigiente procedimiento solo con el tipo CHAR:

procedure leer_vector(var p:vector;var lp,ne:integer);
var
palabra:string[10];
ok:boolean;
i:integer;
c:char;
begin
ok:=false;
repeat
writeln;
write(' Introduzca la palabra que desea buscar: ');
readln(palabra);
if (length(palabra)=1) or (length(palabra)>9) then
begin
writeln(' Palabra no valida');
writeln;
end
else ok:=true;
until ok;
for i:=1 to length(palabra)+1 do
begin
p[i]:=palabra[i];
end;
lp:=length(palabra);
for i:=length(palabra)+1 to max do p[i]:='*';
writeln;
end;

Y no soy capaz. Se me escapa por ejemplo controlar si la cadena es demasiado largo y cosas asi. Necesitaria un procedimienti distinto a este de mis intentos:
program leer_vector(Input,Output);

type
vector = packed array[1..10]of char;

var
i,j,lp :integer;
ok : boolean;
p : vector;
c:char;

begin
ok:=false;
repeat
for i:=1 to 10 do p[i]:='*';
writeln;
write('Introduzca la palabra a buscar: ');
i:=1;
repeat
read(c);
if c<>chr(10) then p[i]:=c;
i:=i+1;
until (c=chr(10)) or (i>10);

writeln;
if (p[2]='*') or (p[9+1]<>'*') then writeln('­Palabra no valida!')
else begin
ok:=true;
end;
writeln;
writeln;
for i:=1 to 10 do write(p[i]);
until ok;
readln;
end.

Gracias tio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Leer una cadena de caracteres.

Publicado por Mechanic (177 intervenciones) el 08/12/2007 01:23:28
Tate.

Creo que siempre te salen: ******** estrellitas porque pusiste:

repeat
for i:=1 to 10 do p[i]:='*';

Cada vez que se repite el ciclo, estás rellenando tu array con asteriscos

Debes ponerlo así:

for i:=1 to 10 do p[i]:='*';
repeat

Así inicializas tu array y luego ya en el ciclo dejas que el usuario lo rellene con su cadena.


voy a seguir analizando tu programa..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una cadena de caracteres.

Publicado por adan  (1 intervención) el 23/06/2008 23:31:50
por lo que yo se para leer una cadena de caracteres se declara así

char caracter [1][10]
el uno es la posicion del arreglo y el 10 es la longitud de los carateres

y para leerlos es
scanf("%s",caracter);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una cadena de caracteres.

Publicado por Sonic3192 (1 intervención) el 14/04/2009 23:05:29
Gracias por el codigo me es de mucha ayuda :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar