C++ 프로그래밍 코딩테스트
계산기 프로그램 작성(Vector 사용)
Calculator.h
//작성자 : 오윤범 #ifndef CALCULATOR_H #define CALCULATOR_H #include<string> #include<vector> using namespace std; class Calculator { public: double Calculate(string str); private: vector<double> number; vector<char> cper; }; #endif
Calculator.cpp
//작성자 : 오윤범 #include "Calculator.h" #include<iostream> #include<sstream> #include<vector> #include<ctype.h>//isdigit() 사용하기 위해 필요함 using namespace std; double Calculator::Calculate(string str) { number.clear();//벡터 공간 초기화 cper.clear();// 벡터 공간 초기화 stringstream ss(str);//1+2 라고 입력한다고 가정 double cal_number;//계산 시 사용되는 숫자들을 담는 변수 char cal_cper;//계산 시 사용되는 연산자들을 담는 변수 bool valid_input = true;//입력값이 유효한지 판단 while (ss >> cal_number)//cal_number:1,2 { number.push_back(cal_number);//number[0]=1 , number[1]=2 if (ss >> cal_cper)// cal_cper:+ { cper.push_back(cal_cper);//cper[0]= + } } for (int i = 0; i < str.length(); i++)//입력된 문자열 길이만큼 돌면서 { if (!isdigit(str[i]) && str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/')//!isdigit(str[i] -> str[i]가 숫자가 아니고, 사칙연산(+ - * /) 이 아닌 다른 입력이 들어오면 { valid_input = false;//valid_input을 false로 바꿔줌 break; } } if (valid_input)//유효한 입력값이 들어왔을때만(유효한 입력인지는 25행~32행에서 판단) 정상적으로 수행 { double result = number[0];//1+2 입력시에 처음에 result에는 1이 들어오고 for (int i = 0; i < cper.size(); i++) { switch (cper[i]) { case '+': result += number[i + 1];// 1+2 라고 입력이 들어오면 number[0] + num[1] 즉 1+2가 result값으로 저장됨 cout << "= " << result << endl; break; case '-': result -= number[i + 1];//+와동일 cout << "= " << result << endl; break; case '*': result *= number[i + 1];//*와 동일 cout << "= " << result << endl; break; case '/': if (number[i + 1] != 0)//나누는수가 0이 아니면 정상 실행 { result /= number[i + 1]; cout << "= " << result << endl; } else { cout << "Attempted to divide by zero!" << endl;//나누는 수가 0인경우 오류 발생 } break; default: break; } } return result; } else//정상적인 입력이 아닌 경우 즉 valid_input 이 false인 경우 { cout << "정상적인 수식을 입력하세요!!" << endl;//오류발생 return 0; } }
CalculatorTutorial.cpp
//작성자 : 오윤범 #include<iostream> #include<string> #include "Calculator.h" using namespace std; int main() { Calculator calculator; string str_input;//사용자가 입력하는 문자열 cout << "Calculator Console Application" << endl << endl << "Please enter the operation to perform.Format: a + b | a - b | a * b | a / b" << endl << "Press \"ctrl + c\" to exit the program" << endl << endl; while (true) { cout << "input >> "; getline(cin, str_input);//사용자가 입력하는 문자열을 str_input으로 저장 if (cin.eof())//ctrl+c 만나면 프로그램 종료 { exit(0); } calculator.Calculate(str_input); } }
1) Vector을 처음 사용해봐서 좀 어려웠음
2) Stringstream 이해하는데 어려웠음
3) 유효한 입력인지 확인할 때 사용하는 isdigit()함수 처음 알았음
4) c++에서는 Ctrl+c같은 특수 입력을 cin.eof()로 잡는지 처음 알았음