그렇군요... 저도 배웠습니다. 감사합니다.
장성호 님이 쓰신 글 :
:
: for(int i=0; iText.Length(); i++) {
: if(Edit->Text.c_str()[i] >= '0' && Edit->Text.c_str()[i] <= '9' ){
: // 숫자처리
: }
: }
:
:
: 간단히 답변달기 위해서 작성하신 코드겠지만..
:
: TEdit및 VCL의 Caption이나 Text에 접근할때
: 위와같이 Length나 c_str()을 반복해서 쓰는것은 매우 좋지 않습니다.
:
: TEdit->Text는 Property로 된것으로 ..
: Text에 한번 접근할때마나
: 1) TControl의 GetText함수가 호출되구
: 2) TEdit의 경우 GetWindowText라는 win32api가 호출됩니다.
: 3) 그런다음 return할때 AnsiString을 새로 할당해서 (메모리 새로 할당) 가져온 내용을 copy한다음에
: return해줍니다.
:
: 위 코드의 경우 GetText가 Length*3 회 호출되고
: 메모리 할당 및 해제도 Length*3 회 만큼 반복하게 됩니다.
:
: Text라는 Property가 내부 String변수를 그냥 return해주는것이 아니지요
:
: 다음과 같이 String변수에 한번 받아와서 처리하는것이 훨씬 좋습니다.
:
:
: String s=Edit->Text;
: char *p=s.c_str();
:
: for( int i=0 ; i < s.Length() ; i++ )
: {
: if( p[i] >= '0' && p[i] <= '9' )
: {
: // 숫자처리
: }
: }
:
:
: 그럼..
:
:
: 송신영 님이 쓰신 글 :
: : Edit->Text 값을 문자 하나씩 가져와서 비교하여 처리하는 루틴을 직접 작성하셔야합니다.
: :
: : for(int i=0; i<Edit->Text.Length(); i++) {
: : if(Edit->Text.c_str()[i] >= '0' && Edit->Text.c_str()[i] <= '9' ){
: : // 숫자처리
: : }
: : }
: :
: : 홀로롤로로로롤롤로로 님이 쓰신 글 :
: : : 5x 라는 값을 받으면
: : : 5라는 값을 int 에 넣는 방법점여~
: : : 아니면 if로 x를 인식하고 빼는방법점여~
|