StartprogrammingusingObjectPascal:Strings

From 흡혈양파의 번역工房
Jump to navigation Jump to search

문자열

string 형식은 연속된 문자를 지닐 수 있는 변수를 선언하기 위해 사용합니다. 본문, 이름, 또는 자동차 등록 표지판 번호와 같은 문자와 숫자의 조합을 저장할 때 사용할 수 있습니다.


이 예제에서는 사용자 이름을 받아들이기 위한 string 변수를 어떻게 사용하는지 보게 될 것입니다.

var
    Name: string;
begin
    Write('Please enter your name : ');
    Readln(Name);
    Writeln('Hello ', Name);

    Writeln('Press enter key to close');
    Readln;
end.


다음 예제에서는 사람의 정보를 저장하기 위해 문자열 형의 변수들을 사용할 것입니다.

var
    Name: string;
    Address: string;
    ID: string;
    DOB: string;
begin
    Write('Please enter your name : ');
    Readln(Name);
    Write('Please enter your address : ');
    Readln(Address);
    Write('Please enter your ID number : ');
    Readln(ID);
    Write('Please enter your date of birth : ');
    Readln(DOB);
    Writeln;
    Writeln('Card:');
    Writeln('------------------------------------------');
    Writeln('| Name : ', Name);
    Writeln('| Address : ', Address);
    Writeln('| ID : ', ID);
    Writeln('| DOB : ', DOB);
    Writeln('------------------------------------------');
    Writeln('Press enter key to close');
    Readln;
end.


문자열들은 긴 문자열을 만들기 위해 결합할 수 있습니다.

예를 들어, 다음 예제와 같이 FirstName, SecondName, 그리고 FamilyNameFullName이라고 하는 다른 문자열에 합칠 수 있습니다.

var
    YourName: string;
    Father: string;
    GrandFather: string;
    FullName: string;
begin
    Write('Please enter your first name : ');
    Readln(YourName);
    Write('Please enter your father name : ');
    Readln(Father);
    Write('Please enter your grand father name : ');
    Readln(GrandFather);
    FullName:= YourName + ' ' + Father + ' ' + GrandFather;
    Writeln('Your full name is: ', FullName);
    Writeln('Press enter key to close');
    Readln;
end.


참고로 이 예제에서 이름들 사이를 분리하기 위해 (YourName + ' ' + Father 와 같은)이름들 사이에 공백(‘ ‘)을 더했습니다. 공백도 역시 문자입니다.

문자열에 대해 내부에서 글자의 일부분을 찾거나, 일부 문자열을 다른 문자열 변수로 복사 한다거나, 또는 다음 예제와 같이 텍스트 문자들을 대문자로 혹은 소문자로 바꾸는 등의 여러 가지 처리를 할 수 있습니다.


이 줄은 FullName에 들어있는 문자들을 대문자 문자열 값으로 바꿉니다.

FullName := UpperCase(FullName);


그리고 이 줄은 소문자로 바꿉니다.

FullName := LowerCase(FullName);


다음 예제에서, Pos 함수를 사용하여 사용자 이름에서 a 문자를 검색하려고 합니다. Pos 함수는 문자열의 첫번째 존재(인덱스)를 되돌리거나, 검색한 텍스트에서 문자나 하위문자열이 없는 경우 0을 반환합니다.

var
    YourName: string;
begin
    Write('Please enter your name : ');
    Readln(YourName);
    If Pos('a', YourName) > 0 then
        Writeln('Your name contains a')
    else
        Writeln('Your name does not contain a letter');

    Writeln('Press enter key to close');
    Readln;
end.


이름에 대문자 A를 포함하고 있다면, Pos 함수는 이것을 가리키지 않을 것입니다. 왜냐면 앞서 우리가 보았듯이 Aa 와 다르기 때문입니다.


이 문제를 해결하기 위해 모든 사용자 이름의 글자를 소문자로 바꾼 다음에 검색을 시작할 수 있습니다.

If Pos('a', LowerCase(YourName)) > 0 then


다음 수정한 코드에서는, 사용자 이름에 a의 위치가 어디에 있는지를 표시할 것입니다.

var
    YourName: string;
begin
    Write('Please enter your name : ');
    Readln(YourName);

    If Pos('a', LowerCase(YourName)) > 0 then
    begin
        Writeln('Your name contains a');
        Writeln('a position in your name is: ', Pos('a', LowerCase(YourName)));
    end
    else
        Writeln('Your name does not contain a letter');

    Write('Press enter key to close');
    Readln;
end.


이름에 하나 이상의 a 글자가 들어있다면, Pos 함수는 사용자 이름에서 문자 a의 처음 위치 인덱스를 되돌릴 것임을 참고하시는 것이 좋겠습니다.

Length 함수를 사용하여 문자열에 있는 문자의 수를 셀 수 있습니다.

Writeln('Your name length is ', Length(YourName), ' letters');


또한 인덱스 번호를 사용하여 문자열의 첫번째 글자/문자를 가져올 수 있습니다.

Writeln('Your first letter is ',  YourName[1]);


그리고 두번째 문자도 가져올 수 있습니다.

Writeln('Your second letter is ', YourName[2]);


마지막 문자도 가져올 수 있습니다.

Writeln('Your last letter is ', YourName[Length(YourName)]);


또한 for 순환문을 사용하여 문자열 변수의 문자를 문자별로 보여줄 수 있습니다.

    for i := 1 to Length(YourName) do
        Writeln(YourName[i]);