C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[764] 어떤 문자든 무조건 숫자로 변환하기 ..
이점한 [redyouth] 7908 읽음    2008-04-16 13:43
아주 허접(?)하지만 밥먹고 배부르고 심심(?)해서 한번 올려 봅니다.

가끔 StrToInt() 함수 쓰다보면 문자열에 아무것도 없거나 중간에 문자가 섞여 있으면 짜증 나죠 ?
아래에 허접한 소스는 이런 문제점들을 걍 해결 해버리는 함수 입니다.
고수분들이야 알아서 잘 처리 하시겠지만 혹시 참고 하실분 계시면 보시고 더 좋은 방법 알면 서로
공유 해보죠 ? 혹시 이런함수가 API나 VCL에 있는건 아니겠죠 ? 오랜시간 코딩만 했지 참 제 실력이
허접해서 아이러니 합니다.

- 변환 되는 경우
문자열 "789" => 숫자 789
문자열 "" => 숫자 0
문자열 "12장3난4하5냐?" => 숫자 12345

뭐 대충 이렇게 만들어 주는 함수 입니다. StrToInt()쓰다가 간혹 예기치 않은 문자열 값때문에 Exception이
하도 발생하여 짜증이 좀 나서 만들어 봤습니다. 혹시나 큰수로 바꿀일 있을까 싶어서 StrToInt() 안쓰고
int64가 리턴 되는 StrToInt64() 써봤습니다.
이것도 팁 축에는 들어갈까요 ??

아래는 허접한 소스입니다.

// 문자를 무조건 숫자로 바꾼다.
__int64 __fastcall Str2Int( AnsiString Str )
{
    AnsiString _Str;
    for ( int i=1; i < Str.Length() +1 ; i++ )
    {
       AnsiString tmp = Str.SubString(i,1);
       int chrno = tmp.c_str()[0];
       if ( ( chrno > 47 ) && ( chrno < 58 ) )
       _Str += tmp;
    }

    if ( _Str.Length() == 0 )
      _Str = "0";

    return StrToInt64( _Str );
}

// 여러분들 화이팅입니다!!
허정주 [tinydew4]   2008-04-19 19:24 X
음수 처리가 안되겠네요?
이점한 [redyouth]   2008-04-19 23:12 X
아 그렇네요 .. 음수까지는 생각을 못했군요 ..
조건문에 음수의 Ascii Code도 "or 조건"으루 추가 해주면 되겠네요 .. ^^;
난항테라 [sksgkd]   2008-04-24 11:22 X
StrToIntDef 함수를 쓰는게 더 좋지 않을까요? 문자열
"12장3난4하5냐?" => 숫자 12345 이런부분이 필요 할지 않다면^^;
이점한 [redyouth]   2008-04-24 16:22 X
나름 숫자와 문자가 섞여 있는것중에서 숫자만 뽑아 낼떄가 간혹 있더라구요 .. ^^;
과니 [tiny2n]   2008-04-24 23:08 X
__int64 __fastcall Str2Int( AnsiString Str )
{
    if (Str.IsEmpty())
        return 0;

        AnsiString StrResult;

        for (int i = 1; i < Str.Length() + 1; i++) {
            char ctChar = Str.SubString(i,1).c_str()[0];
            if (isdigit(ctChar))
                StrResult += ctChar;
        }

        return StrToInt64(StrResult);
}

ctype.h에 보시면 isdigit 라는 함수가 있습니다. 그걸 이용하시는게...
이점한 [redyouth]   2008-04-25 00:52 X
아 ... isdigit 함수가 있었군요 .. ^^;
쪼루쭈 [hssflove]   2008-06-03 15:51 X
저 같은 초보한테는 아주 귀한 정보였네요^^ 감사합니다^^

+ -

관련 글 리스트
764 어떤 문자든 무조건 숫자로 변환하기 .. 이점한 7908 2008/04/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.