Q&A

  • 배열에 관한 질문입니다.
매일 질문만 올리게 되네요. 저도 빨리 고수가 되서 받은만큼 보답해야 겠습니다.

질문에 답변을 달아주시는 분들께 정말 감사드립니다.

배열에 관한 2가지 질문입니다.

1. 동적 배열에서 가장 끝의 요소를 지우고 사이즈를 하나 줄이는 방법을 알고 싶습니다.

전 setlength를 이용해서 해봤습니다만 잘 안되는거 같아서요.

a라는 동적 배열을 잡고 setlength(a,10)으로 사이즈를 잡은 뒤

10개의 요소를 넣고 그 상태에서 setlength(a,9)를 해줬습니다.

이렇게 하면 마지막 element가 없어지고 사이즈가 하나 줄 것같았는데

그렇게 안되는거 같더군요. (경황이 없어 제대로 확인은 못했습니다만...)

이렇게 배열 가장 끝의 element를 없애버리고 사이즈를 하나 줄이는 방법이 없는가 궁금하네요.

자바의 경우 이런 함수가 있었는데.. 델파이 api는 사용 법이 애매해서 못찾겠더군요..

2. aa: array of string이 있습니다.

사이즈를 잡고 안에 스트링들을 넣어준 상태에서

가장 끝의 스트링이 비어있는가를 알고 싶습니다.

if aa[length(aa)-1] = null     이나  
if aa[length(aa)-1] = ''   정도로 체크가 될 줄 알았는데

이런 식으로는 체크가 안되더군요. 분명히 showMessage로 찍어보면

비어있는 놈들이 이 루틴을 피해 else쪽으로 넘어갑니다.

string 또는 record type(위에서 지정해 준)으로 이뤄진 배열 안의 한 요소가 값을 가지고 있는지 아닌지 알고 싶습니다.

a[0] = 'test';
a[1] = '';
a[2] = 'test1';

여기서 루프를 돌면서 a[1]만 걸러내는 방법을 알려주세요.

그럼 부탁드리겠습니다~!
1  COMMENTS
  • Profile
    홍성락 2003.04.18 11:59
    아래 문제는 High 함수로 하면 될거 같아요...
    1번은요
    setlength(a,10) 하면 0~9 까지의 배열이 생깁니다
    var
       i : integer;
    begin
        setlength(aa,10);
        for i := 0 to High(aa) do
           aa[i] := intToStr(i);
    end;
    -------------------------------------------------
    var
       i : integer;
    begin
        setlength(aa,9);
        ListBox1.Clear;
        for i := 0 to High(aa) do
           ListBox1.Items.Add(aa[i]);
    end;

    2번은요
        aa[High(aa)] := ''; 이렇게하면 마지막에 공백이 생기구요
    마지막이 공백인지 검사는
    begin
        if aa[High(aa)] = '' then
           showmessage('마지막이 비었어요');
    end;

    hsr/////////////////////////////////////////