|
C++Builder 는 VCL 이라는 Visual Component Library 를 지원 합니다.
Edit box 역시 TEditBox 라는 Class (VCL) 라이브러리 입니다.
TEditBox 의 Text 는 역시 TEditBox 의 Class Property 인데
그 값이 AnsiString type 입니다.
좀더 찾아 보시면 모든 Property 들은 내부적으로 함수 콜(class 내부 member function) 을 합니다.
이러한 것들을 published property 들이라 하는데요.... 뭐.. 자꾸 들어가면 복잡합니다.
여기서 설명드릴만한 여유도 없구요..
c_str() 은 AnsiString 의 member function 입니다.
return 값은 해당 AnsiString 의 내부에 string data를 갖고 있는데 이들의 메모리를
char * type으로 return 해 줍니다.
AnsiString 은 class 입니다.
그러므로 AnsiString은 바로 다른 AnsiString 에 대입해도 결국 operator overload 에 의하여
strcpy 같은것이 호출 되는 것 입니다.
AnsiString a = "aaaa";
AnsiString b = a;
이렇게 그냥 대입문으로 쓸수가 있는것이죠.. 여기서 b=a 의 = 은 일반적인 대입문이 아닙니다.
연산자를 다른 용도로 쓰도록 한 기능이 들어 가 있습니다.
그러므로
AnsiString a = "aaa";
char *p = a;
이런식으로 않된다는 것이죠.
즉 char *p 의 type 은 char * 입니다.
그러므로 = 대입문에 합당하게 오른쪽도 char * 여야 하지요.
AnsiString 의 c_str() 함수는 바로 이러한 char * return 을 해줍니다.
char *p = a.c_str(); 이렇게요.
CBilder IDE Editor 에 AnsiString 이라 치고 커서를 갖다 놓고 F1 을 눌르시면
AnsiString (Visual Component Library Reference) 라고 나올 것 입니다.
이것을 선택하시면 help 가 나오는데
help 위에 Methods 라고 나올 것 입니다.
Methods 를 눌르시면 AnsiString 의 method 들이 나올것이며 여기서
c_str() 을 찾으실 수 있을 것 입니다.
감사 합니다.
C++Builder 님이 쓰신 글 :
: 안녕하세요 둘리님!
:
: 답변 정말 많은 도움되어 고맙습니다.
: 한가지 잘 몰라서 더 여쭤볼께요
: 답변중에 Text.c_str(); 라고 하셨는데 에디트박스 속성에 바로 붙여쓴 c_str()가 내장함수 인가요?
:
:
: 둘리 님이 쓰신 글 :
: : C++ Builder 에서 문자열을 다루실려면, 특히 컴포넌트와 연계해서 다루실려면
: : AnsiString 이라는 type을 알아야 합니다.
: : CBuilder IED Editor 에서 AnsiString 이락 치시고 F1 을 눌러 보세요.
: : 설명이 나올 겁니다.
: :
: : 참고적으로
: : Edit->Text 는 그 type 이 AnsiString 입니다.
: : AnsiString s = Edit->Text;
: : int char_count = s.Length(); << 이렇게 길이 구합니다.
: :
: :
: : 그리고
: : char *p = Edit->Text.c_str();
: : for(int i=0;i<Edit->Text.Length();i++){
: : // 여기서 *(p+i) 를 a , b,c ,d 와 비교해서 갯수 해아리면 되겠죠?
: : }
: :
: : C++Builder는 수 많은 VCL 이라는 Visual 또는 Invisible Component 라이브러리를 사용 합니다.
: : 언제든 F1 을 눌러 Help 를 참조 하세요.
: : C++Builder F1 속에 거의 모든 내용이 있습니다.
: :
: :
: : C++Builder 님이 쓰신 글 :
: : : 제목대로 에디트박스에 입력된 문자열전체, 또는 문자열중에서 a,b,c,d 가 각각 몇개 인가를 알아내서 레이블이나 다른 에디트박스로 출력하는 프로그램을 짜려고 합니다.
: : :
: : : char x;
: : : int counta, countb, countc, countd;
: : :
: : : while ((x = getchar()) != '\n'){
: : : switch (x){
: : : case 'a':
: : : counta++;
: : : break;
: : : case 'b':
: : : ....
: : : ..
: : :
: : : 위는 C에서의 알고리즘인데요, 저걸 약간 변형하면 될것 같은데..저는 C만 배우고 C빌더는 처음이라..
: : : x = Edit1->Text 대충 했더니 에러...ㅠㅠ ㅎㅎ
: : : 알려주세요..
|