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
[60459] Re:edit 에서 숫자와 문자 가려 구분 하는것좀;;
한수동 [hsd1987] 1297 읽음    2010-03-15 20:47
어딘가 말씀하신 것 그대로 실현시킨 컴포넌트가 있을 듯 하지만요 저는 모르는 관계로
제가 짠 소스하나를 드리겠습니다
조금 허접한 소스라 양해부탁드립니다;
수식을 사용자가 문자로 입력하면 연산자와 숫자를 구분해서
값을 내놓는 그런 함수입니다
님이 요구하시는 것이랑 비슷 한것 같아서 올립니다. 참고하시길
int ParenthO = 0;
bool TextCalculate(char* CalculateText, int *Result) //48은 char로 0을 지칭
{
	if(!CalculateText)	{	*Result = 0;	return true;	}

	char *Text   = CalculateText;
	int  i       = 0;

	int  Parenth = ParenthO;
	while(1)	{
		if     (Text[i] == NULL)	{
			if(Parenth>0)	{	ShowMessage("괄호입력 오류");	ParenthO = 0; return false;	}
			break;
		}
		else if(Text[i] == '(')	Parenth++;
		else if(Text[i] == ')')	Parenth--;
		if(Parenth<0)	{	ShowMessage("괄호입력 오류");	ParenthO = 0; return false;	}
		i++;
	}

	int  		  Buff	, Temp	, NUM;
	char 		  BuffOp, TempOp;
	UnicodeString UT;

	BuffOp 	= NULL;
	TempOp 	= NULL;
	NUM    	= 0;
	i 		= 0;
	while(1)	{
		if	   ((Text[i] > 47) && (Text[i] < 58))  	{	UT = Text[i];	NUM = NUM*10 + UT.ToInt();	}
		else if((Text[i]=='+') || (Text[i]=='-'))	{

			switch (BuffOp) {
				case '+':	Buff = Buff + NUM;	break;
				case '-':   Buff = Buff - NUM;  break;
				case '*':   Buff = Buff * NUM;  break;
				case '/':   Buff = Buff / NUM;  break;
				default :   Buff = NUM;         break;
			}
			if(TempOp!=NULL)	{
				if	   (TempOp=='+')	Buff = Temp + Buff;
				else if(TempOp=='-')	Buff = Temp - Buff;
				TempOp = NULL;
				Temp   = 0;
			}
			BuffOp 	= Text[i];
			NUM 	= 0;
		}
		else if((Text[i]=='*') || (Text[i]=='/'))	{

			switch (BuffOp) {
				case '+':	Temp = Buff;		TempOp = BuffOp;	break;
				case '-':   Temp = Buff;		TempOp = BuffOp;    break;
				case '*':   Buff = Buff * NUM;                  	break;
				case '/':   Buff = Buff / NUM;                  	break;
				default :   Buff = NUM;                         	break;
			}

			BuffOp 	= Text[i];
			NUM 	= 0;
		}
		else if((Text[i]=='(') || (Text[i]==')'))	{
			int  *pNUM;		pNUM  = &NUM;
			char *pText;	pText = &Text[i+1];
			if	   (Text[i]=='(')	{
				int s 		= i;
					Parenth = 0;
				while(1)	{
					if		(Text[s]=='(')	Parenth++;
					else if (Text[s]==')')	Parenth--;

					if(Parenth==0)	{	i = s;	break;	}
					s++;
				}
				ParenthO++;
				TextCalculate(pText, pNUM);
			}
			else if(Text[i]==')')	{   ParenthO--;
				switch (BuffOp) {
					case '+':  Buff = Buff + NUM;	break;
					case '-':  Buff = Buff - NUM;  break;
					case '*':  Buff = Buff * NUM;  break;
					case '/':  Buff = Buff / NUM;  break;
					default :  Buff = NUM;         break;
				}
				if(TempOp!=NULL)	{
					if	   (TempOp=='+')	Buff = Temp + Buff;
					else if(TempOp=='-')	Buff = Temp - Buff;
				}
				ParenthO = 0;
			   *Result 	 = Buff;
				return true;
			}
		}
		else if(Text[i]==NULL)	{

			switch (BuffOp) {
				case '+':	Buff = Buff + NUM;	break;
				case '-':	Buff = Buff - NUM;	break;
				case '*':	Buff = Buff * NUM;	break;
				case '/':	Buff = Buff / NUM;	break;
				default :   Buff = NUM;         break;
			}
			if(TempOp!=NULL)	{
				if	   (TempOp=='+')	Buff = Temp + Buff;
				else if(TempOp=='-')	Buff = Temp - Buff;
			}
			ParenthO = 0;
			*Result = Buff;
			return true;
		}
		else	{	ShowMessage("숫자, 사칙연산과 괄호만 입력해주세요");	ParenthO = 0;	return false;	}

		i++;
	}
}





홀로롤로로로롤롤로로 님이 쓰신 글 :
: 방정식 프로그램을 짜고 있는데;
: x기능이 문제더라구요
: 지금으로썬 그냥 체크박스로 int 로 때웠는데
: 것보단 edit 에 x를 쓰면
: 숫자와 x를 가려
: int x 에 저절로 들어가는 것을 하려구 하는데요
: 도와주세요

+ -

관련 글 리스트
60455 edit 에서 숫자와 문자 가려 구분 하는것좀;; 홀로롤로로로롤롤로로 1065 2010/03/15
60459     Re:edit 에서 숫자와 문자 가려 구분 하는것좀;; 한수동 1297 2010/03/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.