안녕하세요. 프로그래머포럼 C++Builder 작은모임 빌더라운지 담당 임펠리테리입니다.
오늘은 여기다 바로 답변을 올리죠.. 후후...
간단하네요.. 사소한 실수를 하셨습니다.
Pos()메소드는 클래스 AnsiString의 멤버니까 AnsiString 클래스의 객체의 멤버연산자
(.)을 써서 억세스해야죠. 에러는 그것땜에 난거구요...
문자 하나를 찾기 위해서 Pos()메소드를 쓰는건 좀 그렇네요.. AnsiString의 멤버 연
산자중에 [] 연산자가 있는데, 이걸 쓰는게 훨씬 낫겠네요.
다음은 Label1에 쉼표문자를 포함한 문자열이 있을때 쉼표만 제거하기 위한 버튼의 클
릭 이벤트핸들러입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Str(Label1->Caption);
int StrLen = Str.Length();
int index = 1;
while(index<= StrLen)
if(Str[index] == ',')
{
Str.Delete(index, 1);
--StrLen;
}
else
++index;
Label1->Caption = Str;
}
쩝~ 잘 됩니다.. 테스트도 해봤습니다. 그런데.. 맘에 안들어서 ansi c 스타일로 한번
더 해봤습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *Str = new char[Label1->Caption.Length()+1];
strcpy(Str, Label1->Caption.c_str());
char *p = Str;
while(*p)
*p == ',' ? strcpy(p, p+1) : p++;
Label1->Caption = Str;
}
이것도 테스트해봤습니다. 잘 되구요, 당연히 속도는 훨씬 빠릅니다.
아무거나 써보세요.
도움되시기를 바라면서, 이만...
독립문에서 임펠리테리였습니다.
(cbuilder, skyhi18)
|