게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
간단한(?) 계산기 질문
게시물ID : programmer_17574짧은주소 복사하기
작성자 : 푸아
추천 : 0
조회수 : 561회
댓글수 : 17개
등록시간 : 2016/06/11 16:41:03
옵션
  • 본인삭제금지

100 + 200 + 300

문자열로 받아서 더할려고 합니다

즉, 여러 숫자를 연산을 하려고 합니다. 한라인에 말이죠

char arr[] = "100 + 200 + 300" (공백 포함)

이 들어가 있고 여기서 사칙연산 + - * / % 을 가능하게 만드려고 합니다. 어떻게 해야할까요?

포인터를 사용하지 말아야합니다.

전체 추천리스트 보기
2016-06-11 17:45:02추천 0
구글에 계산기 검색하면 많이 나와여 ㅎㅎ
댓글 1개 ▲
2016-06-11 17:55:37추천 0
구글링은 이미 많이 해봣지만 도저히 나오지가 않네요
2016-06-11 18:01:39추천 0
c 언어 스택 계산기
댓글 3개 ▲
2016-06-11 18:46:01추천 0
스택을 사용하면 안댑니다.. 구조체를 사용하지 않고 해야해요..
2016-06-11 20:19:13추천 0
?
스택이랑 구조체랑 무슨 상관이에여?
2016-06-11 21:41:57추천 0
스택을 구현하는데 연결리스트를 사용해야 하는데.. 연결리스트 사용시에는 구조체를 사용해야죠
2016-06-11 19:19:07추천 0
숫자, 공백, 연산자를 분리 후 괄호 -> *, /, % -> +, - 순서대로 만들면 될거같아요.
댓글 1개 ▲
2016-06-11 19:24:15추천 0
분리하는게 어렵네요..
2016-06-11 20:31:20추천 0
포인터와 스택을 쓰면 안되는 이유가 뭔가요?
C는 문자열을 다루는 것 부터가 포인터를 써야 합니다만.
댓글 3개 ▲
2016-06-11 20:57:44추천 0
친구 과제를 도와주고 있는데 배열까지만 배우고 포인터를 배우지 않았다네요
2016-06-11 22:59:06추천 1
아.
자주 보는 바보같은 이유네요. 그냥 쓸 수 있는건 다 쓰세요.
2016-06-13 03:06:05추천 0
엄청나게 잘 짜여져있는 코드만 아니면 뭐...
구조체 정도야 그냥 써도 될거 같은데요?
2016-06-12 23:49:55추천 0
char arr[] = "100 + 200 + 300" (공백 포함) 으로 꼭 받아야 할까요..?

package com.example.java;

public class CalculatorEngine {
 private final int NUMBER     = 0;
 private final int NUM_OP_NUM = 1;

 private int state; // NUMBER or NUM_OP_NUM

 private double num1, num2;
 private String op;
 private double display;

 public CalculatorEngine() {
  initialize();
 }

 public void initialize() {
  state = NUMBER;
  num1 = 0;
  display = 0;
 }

 public double numberToDisplay() {
//  if (state == NUMBER)
//   return num1;
//  else // state == NUM_OP_NUM
//   return num2;
  return display;
 }

 public void setDisplay(double d) {
  display = d;
  state = NUMBER;
  num1 = d;
 }

 public void Enter(String word) {
  if (state == NUMBER) {
   if ( word.length() == 1) {
    switch( word.charAt(0) ) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
     num1 = num1 * 10 + (word.charAt(0)-'0');
     display = num1;
     break;
    case '+':
    case '-':
    case '*':
    case '/':
     state = NUM_OP_NUM;
     op = word;
     num2 = 0;
     display = num1;
     break;
    case '=':
     display = num1;
     num1 = 0;
     break;
    case 'C':
     num1 = 0;
     display = 0;
     break;
    }
   }
  }
  else { // state == NUM_OP_NUM
   if ( word.length() == 1) {
    switch( word.charAt(0) ) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
     num2 = num2 * 10 + (word.charAt(0)-'0');
     display = num2;
     break;
    case '+':
    case '-':
    case '*':
    case '/':
     doCalc();
     op = word;
     num2 = 0;
     display = num1;
     break;
    case '=':
     doCalc();
     display = num1;
     num1 = 0;
     state = NUMBER;
     break;
    case 'C':
     num2 = 0;
     display = 0;
     break;
    }
   }
  }
 }

 private void doCalc() { // In state NUM_OP_NUM
  switch(op.charAt(0)) {
  case '+':
   num1 = num1 + num2;
   break;
  case '-':
   num1 = num1 - num2;
   break;
  case '*':
   num1 = num1 * num2;
   break;
  case '/':
   num1 = num1 / num2;
  }
 }

이런식으로 사용하는건어떨까요

 public static void main(String[] args) {
  CalculatorEngine ce = new CalculatorEngine();
  ce.Enter("4");
  ce.Enter("1");
  ce.Enter("+");
  ce.Enter("5");
  ce.Enter("=");
  if (ce.numberToDisplay() != 46)
   System.err.println("Something wrong in the calculator engine");
 }

}
댓글 0개 ▲
2016-06-13 03:10:42추천 0
Strtok로 토큰을 받아서 나누고 (100 + 300 이면 intarr[]에 숫자 symbolarr[]에 부호)
혹은 100 + 300 도 되고 100+300도 되면 와일룹 돌려서 부호 나올때까지
Ctoi() 만들어서 스트링을 인티저로 넘기고 부호 나오면 그 부호로 셈을 하면 되겠는데요 (스위치케이스나 이프)
빅 데시몰 구현이면 연결리스트로 숫자를 구현해도 되고...
아니라면 트리로써서 rpn이던 뭐던 notation으로 바꾸는게 편할거 같은데
댓글 0개 ▲
[본인삭제]오유하는조씨
2016-06-13 16:46:31추천 0
댓글 0개 ▲
2016-06-13 16:48:15추천 0
연산자 우선순위나 괄호 들어가기 시작하면 저런 방식으론 엄청나게 복잡하게 만들어질텐데요....
댓글 0개 ▲
2016-06-13 16:48:49추천 0
혹시 재귀 함수도 안되나요...
댓글 0개 ▲
2016-06-15 02:31:29추천 0
구조체 말고 문자 배열, 숫자 배열 두가지 선언 한 다음
입력받을 때
숫자를 입력받다가
숫자가 아닌 +-/* 가 입력되면
문자배열에 기호를 저장하고 다시 숫자로 넘어가는 방식은 혹시 구현이 안될까요...?
댓글 0개 ▲
[본인삭제]악마의공돌이
2016-06-19 06:34:01추천 0
댓글 0개 ▲
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호