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

C++빌더 Q&A
C++Builder Programming Q&A
[67521] Re:Edit 문자열 비교 질문있습니다
박지훈.임프 [cbuilder] 2037 읽음    2012-06-14 19:26
C++빌더에 입문하시는 중이신 것 같습니다.

일단, 그렇게 해도 됩니다.
먼저, Edit1->Text[1]은 스트링이 아니라 문자입니다. 스트링인 Text의 첫번째 문자를 가져온 거죠. 문자는 == 연산자로 비교가 가능하죠.

그런데 에러가 나는 것은 스트링 Edit1->Text이 완전히 빈 스트링일 경우에 첫번째 문자를 액세스하려고 했으니 당연히 에러가 난 겁니다.

그러니까 에러가 난 것은 == 연산자를 써도 되느냐 라고 걱정하신 것과는 전혀 무관한 문제이고요. 비교를 하는 것이 아니라 단순히 ShowMessage(Edit1->Text[1]) 이렇게만 해도 똑같은 에러가 납니다.

이런 경우처럼 빈 스트링일 수도 있어서 []를 써서 배열 인덱스로 첫번째 문자를 액세스하면 안되는 경우에는, 스트링 클래스의 SubString() 멤버 함수를 쓰면 됩니다. 스트링을 지정된 위치부터 지정된 길이만큼 잘라오는 함수인데요. 이걸 쓰면 빈 스트링인 경우라도 에러가 나는 대신 빈 스트링을 리턴하므로 안전합니다. 즉, 아래와 같이 하면 됩니다.

if( Edit1->Text.SubString(1, 1) == '0')
    ShowMessage("0입니다");
else
    ShowMessage("0이 아닙니다");


참고로 Edit1->Text는 스트링이라도 ==로 비교해도 됩니다. 그 이유는, Edit1->Text는 C/C++의 널종료 문자열, 즉 포인터가 아니라 AnsiString 혹은 UnicodeString이라는 스트링 클래스이고, == 연산자가 오버로드되어 있기 때문입니다.



이런젠 님이 쓰신 글 :
: EditBox에 입력받은 값이 첫글자가 0이면 명령문을 실행시킬려고 합니다
:
:
:     if( Edit1->Text[1] == '0')		// AnsiString을 배열로 참조하면 첫글자의 index는 1
: 		ShowMessage("0입니다");
: 	else
:          	ShowMessage("0이 아닙니다");
: 

:
: 다음과 같이 코딩했구요 실행시켜본 결과 별문제 없이 정상작동하는데
:
: 보통 문자비교문은 strcmp()같이 문자열 비교함수를 이용하지 '==' 와 같은 비교연산자는 사용하지 않은데
:
: 저런식으로 코딩해도 될련지요?
:
:
:      if( strcmp(Edit1->Text[1], '0'))
: 

:
: 위와같은식으로 코딩했더니 에러가 발생됩니다. 가르침 부탁드립니다

+ -

관련 글 리스트
67515 Edit 문자열 비교 질문있습니다 이런젠 1267 2012/06/14
67521     Re:Edit 문자열 비교 질문있습니다 박지훈.임프 2037 2012/06/14
67516     아니나 다를까 문제발생하네요 이런젠 1231 2012/06/14
67517         Re:아니나 다를까 문제발생하네요 축구 1088 2012/06/14
67518             Re:Re:아니나 다를까 문제발생하네요 이런젠 1080 2012/06/14
67519                 Re:Re:Re:아니나 다를까 문제발생하네요 축구 1189 2012/06/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.