Q&A

  • 문자열추출하는것좀 알려주세요...ㅠ.ㅠ
정보만 가져가다가 이번에 처음으로 글을 올립니다...
제가 이번에 계산기를 만들려고 합니다..
근데 일반 계산기랑은 다른 공학계산기처럼 만들려고 합니다...
무슨 말인고 하니... 3+3-4/3...
이런 식으로 계산기입력창에 나오도록 하고 싶습니다...
그렇게 하려면 문자로 입력을 받고 계산을 하기 위해선 문자열추출을 해야한다고 하던데...
어떻게 하는건지 잘 모르겠어서요...
문자열추출을 해서 계산까지 되는 방법을 알려주셨으면 합니다...
아니면 예제라도...^^
질문이 좀 이상한거 같기도 하고...쩝
부탁드립니다...
1  COMMENTS
  • Profile
    주웰 2005.06.02 01:00
    허접하게 개발 한번 해봤습니다.
    문자열 추출은 아니고요 사칙연사에 의해서만 되도록 했습니다.
    정수만 가능하고요.
    혹시나마 도움이 될지는.....^^;;

    aNumber 와 aSymbol은 TStringGrid 입니다.
    aNumber는 연산기호를 제외한 숫자들 저장하고 있습니다.
    aSymbol은 숫자를 제외한 연산기호를 저장합니다.

    약간에 오류도 있을듯 하네요 ㅡ,.ㅡ;;

    Button15는 = 버튼입니다.

    procedure TForm2.Button15Click(Sender: TObject);
    var
      aInc, aIdx, Sum: integer;

      function SorttingNumber: integer;
      var
        i, j, Tmp: integer;
      begin
        j := aSymbol.Count;

        for i := j - 1 Downto 0 do
        if (aSymbol[i] = '*') then
        begin
          tmp := StrToInt(aNumber[i]) * StrToInt(aNumber[i+1]);
          aNumber[i] := IntToStr(tmp);
          aNumber.Delete(i+1);
          aSymbol.Delete(i);
        end
        else if (aSymbol[i] = '/') then
        begin
          tmp := StrToInt(aNumber[i]) div StrToInt(aNumber[i+1]);
          aNumber[i] := IntToStr(tmp);
          aNumber.Delete(i+1);
          aSymbol.Delete(i);
        end;

        result := aSymbol.Count;
      end;

    begin

      if aTmp <> '' then aNumber.Add(aTmp);                     //aTmp 는 입시 숫자 저장

      aIdx := SorttingNumber -1;

      Sum := StrToInt(aNumber[0]);

      for aInc := 0 to aIdx do
      begin
        if aSymbol[aInc] = '+' then
          Sum := Sum + StrToInt(aNumber[aInc + 1])
        else if aSymbol[aInc] = '-' then
          Sum := Sum - StrToInt(aNumber[aInc + 1])
      end;

      Edit1.Text := IntToStr(Sum);
    end;