Contents

조회 수 9304 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
수식으로 된 문자열 중 한글자씩만 처리하는 간단한 소스코드
아래 주요 함수 설명

/*입력받은 중위표기의 토큰값을 가져오기위한 함수*/
precedence get_token(char *symbol, int *n){
    *symbol = expr[(*n)--];
    switch (*symbol){
        case '(' : return lparen;
        case ')' : return rparen;
        case '+' : return plus;
        case '-' : return minus;
        case '/' : return divide;
        case '*' : return times;
        case '%' : return mod;
        case '\0' : return eos;
        default : return operand;
    }
}

/*전위 표기로 변환된 배열에서 토큰 값을 가져오기 위한 함수*/
precedence get_Associationtoken(char *symbol, int *n){
    *symbol = exprTwice[(*n)++];
    switch (*symbol){
        case '(' : return lparen;
        case ')' : return rparen;
        case '+' : return plus;
        case '-' : return minus;
        case '/' : return divide;
        case '*' : return times;
        case '%' : return mod;
        case '\0' : return eos;
        default : return operand;
    }
}

/*전위로 변환 하는 함수*/
void prefix(void){
    char symbol;
    precedence token;
    int result;
    int n = strlen(expr)-1;
    /*토큰을 뒤에서 부터 가지고 온다*/
    int top = 0;
    int top2 = 0;
    stack[0] = eos;
    /*stack의 처음에 eos를 삽입*/
    /*for문을 이용 중위연산자 expr에서 토큰값이 eos일때까지 반복*/
    for(token = get_token(&symbol, &n);
    token != eos;
    token = get_token(&symbol,&n)){
        if(token == operand){
            exprTwice[top2++]=symbol;
        }else{
            if(token==lparen){
                while(stack[top]!=rparen){
                    exprTwice[top2++]=print_token(Delete(&top));
                }
                Delete(&top);
            }else{
                while(isp[stack[top]] > icp[token]){
                    exprTwice[top2++]=print_token(Delete(&top));
                }
                Add(&top,token);
            }
        }
    }
    while((token=Delete(&top)) != eos){
        exprTwice[top2++]=print_token(token);
    }
    result=eval();
    /*전위표기 연산호출*/
    /*전위로 변환된 배열을 출력*/
    while(top2!=-1){
        printf("%c",exprTwice[--top2]);
        printf(" ");
    }
    printf("\n 연산결과값은 : %d \n",result);
}




?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
841 Develop '2014 모바일 개발 트렌드' 발표자료입니다. file hooni 2014.10.02 986
840 Develop Aspect Oriented Programming in Objective-C hooni 2015.05.18 676
839 Develop DDay Memo 1.9.4 소스코드 secret hooni 2015.10.03 0
838 Develop GCM 사용하기 2 (단말에 GCM 구현하기) file hooni 2013.07.06 23248
837 Develop GCM 사용하기 3 (JSP로 GCM 푸시 서버 만들기) 4 file hooni 2013.07.06 25316
836 Develop git 브런치 배우기 (링크) hooni 2013.07.09 20571
835 Develop GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스 file hooni 2014.10.14 1146
834 Develop How to Test SMTP AUTH using Telnet hooni 2018.04.05 1343
833 Develop JSON, BSON 변환 file hooni 2013.04.23 11814
832 Develop Laravel 5 Failed opening required bootstrap/../vendor/autoload.php hooni 2018.01.24 1662
831 Develop Mac OS 에 Jenkins 설치하기 (Homebrew) 2 file hooni 2017.03.15 8122
830 Develop macOS에 node, npm 설치하기 (homebrew) file hooni 2021.11.06 1149
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71