Zmienna string: wartość pow. 255 znaków


(T Karol) #1

Witam, zrobiłem taki program:

program polowa;

var x:string;

    z,y,v,i,a,j:integer;




 begin


    readln(a);

    for j:=1 to a do

     begin

       readln(x);

       y:=length(x);

       z:=y div 2;

       v:=z+1;

       delete(x, v, z);

       writeln(x);



     end;


 end.

Program ten ma wypisać połowę znaków ze wczytanej zmiennej. Dopiero gdy zrobiłem to całe zadanie, zobaczyłem że zakres zmiennej x to 1<= x <= 2000. Co z tym fantem zrobić ?? String wczytuje tylko do 255 znaków. Macie jakieś pomysły ?? Pozdro.


(Murzyn1) #2

Jeśli dobrze interpretuje to co napisałeś (a jest trochę niejasne) to:

Wczytujesz ciąg znaków np. "AlaMaKotka" i to ma za zadanie wypisać 1/2 ciągu czyli "AlaMa" ???

Ta zmienna "x" to dlugosc maksymalna ciagu? Bo to co masz w kodzie nie za bardzo pasuje ("x" trzyma input z klawiatury, a "y" zachowuje się jak zakres "x" tak?)

Jeśli typ string w pascalu ogranicza cię do 255 znaków to musisz przejść na tablice znaków: Array of Char...

ps. jak będę miał chwilkę to spróbuje ci to napisać...


(T Karol) #3

Dobra, zrobiłem to od początku, wczytuję ładnie dane do tablicy typu char, ale teraz nie wiem jak ustalić długość tej "zapisanej" tablicy, bo jak biorę x:=length(tab) to wychodzi że tablica ma 2000 znaków, ale tak naprawdę słowo miało 8 znaków. Nie wiesz może jak ustalic tą ilość znaków w tablicy ??


(Murzyn1) #4

To co wpisujesz = ciąg, kończy się kodem ASCII #13 (ENTER - CR) lub #10 (ENTER - LF) w zależności od systemu Windows / Linux (jeśli oczywiście wpisujesz znak entera też do tablicy). Możesz też wyzerować tablicę przed wgraniem stringa i szukać pierwszej zerowej wartości, bo to będzie koniec ciągu.


(T Karol) #5

a jak znaleźć tą pierwszą zerową wartość ??


(Murzyn1) #6

Przeszukać liniowo tablice, element po elemencie, znaleźć 0. Inne rozwiązanie, trzymać w zmiennej ilość wpisanych znaków podczas wprowadzania Ich do tablicy?