ALGO - 92 - - 접두사 표현 식 (정규 로 확장)

이 문 제 는 형식 이 한정 되 어 있어 서 비교적 간단 합 니 다. 정규 표현 식 으로 확장 되 었 습 니 다. 일치 하 는 코드 를 여러 개 썼 습 니 다. 그리고 정규 도 복습 하 였 습 니 다. 테스트 데이터 가 적 고 발견 되 지 않 은 오류 가 있 을 수 있 습 니 다. 발견 되면 이 직통 확장 코드 를 지적 하 십시오.
제목.
문제 설명 은 접두사 표현 식 을 문자열 로 입력 한 다음 값 을 계산 하 는 프로그램 을 만 듭 니 다.입력 형식 은 "연산 자 대상 1 대상 2" 입 니 다. 그 중에서 연산 자 는 "+" (덧셈), "-" (뺄셈), "*" (곱셈) 또는 "/" (나눗셈) 이 고 연산 대상 은 10 을 초과 하지 않 는 정수 입 니 다. 그들 사 이 는 빈 칸 으로 구분 합 니 다.요구: 가, 감, 승, 이 네 가지 연산 을 제외 하고 각각 해당 하 는 함 수 를 설계 하여 실현 합 니 다.입력 형식: 한 줄, 즉 접두사 표현 식 문자열 만 입력 하 십시오.출력 형식: 해당 하 는 계산 결 과 를 출력 합 니 다 (나눗셈 이 라면 c 언어의 "/" 연산 자 를 직접 사용 하고 결 과 는 정수 입 니 다).입 출력 샘플 입력 + 52 샘플 출력 7
제목 코드
import java.util.Scanner;

public class Main {

        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            //     
            String str = input.nextLine();
            //           
            String[] arr = str.split(" ");
            //        
            char[] letter = arr[0].toCharArray();
            //    
            switch (letter[0]){
                case '+':
                    System.out.println(Integer.parseInt(arr[1])+Integer.parseInt(arr[2]));
                    break;
                case '-':
                    System.out.println(Integer.parseInt(arr[1])-Integer.parseInt(arr[2]));
                    break;
                case '*':
                    System.out.println(Integer.parseInt(arr[1])*Integer.parseInt(arr[2]));
                    break;
                case '/':
                    System.out.println(Integer.parseInt(arr[1])/Integer.parseInt(arr[2]));
                    break;
            }
    }
}

확 장 된 유 니 버 설 코드
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** * Created by nl101 on 2016/1/22. */
public class Main1 {
    public static void main(String[] args) {
        //    ((12+2)-6)/2
        String str = "/ - + 12 2 6 2";
        System.out.println(prefix(str));
    }

    private static String prefix(String str){
        //                       
        Pattern p = Pattern.compile("[\\+\\-\\*\\/][\\s]\\d{1,}[\\s]\\d{1,}");
        Matcher matcher = p.matcher(str);
        //    
        while (matcher.find()){
            //        ,+ 12 2    14
            String temp = calculate(matcher.group());
            StringBuffer sb = new StringBuffer();
            //             
            matcher.appendReplacement(sb,temp);
            //      
            matcher.appendTail(sb);
            str = sb.toString();
            //                  
            // str = matcher.replaceFirst(calculate(matcher.group()));
            //    
            return prefix(str);
        }
        return str;
    }

    /** *         ,    + 12 2       * @param str * @return */
    private static String calculate(String str){
        String[] arr = str.split(" ");
        int i = 0;
        char[] letter = arr[0].toCharArray();
        switch (letter[0]){
            case '+':
                i = Integer.parseInt(arr[1])+Integer.parseInt(arr[2]);
                break;
            case '-':
                i = Integer.parseInt(arr[1])-Integer.parseInt(arr[2]);
                break;
            case '*':
                i = Integer.parseInt(arr[1])*Integer.parseInt(arr[2]);
                break;
            case '/':
                i = Integer.parseInt(arr[1])/Integer.parseInt(arr[2]);
                break;
        }
        return String.valueOf(i);
    }

}

수준 이 높 지 않 습 니 다. 좋 은 건의 가 있 으 면 댓 글 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기