1. 문제
13. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다.
2. 결과
3. 코드
#include <iostream>
#include <cstring>
using namespace std;
int cal(int a, char* p, int b);
int main()
{
char s[30];
int a; char *p = NULL; int b;
while(1) {
cout << "? ";
cin.getline( s, 30 );
a = atoi( strtok( s, " ") );
p = strtok( NULL, " ");
b = atoi( strtok( NULL, " ") );
cout << a << " " << p << " " << b << " = " << cal(a,p,b) << endl;
}
}
int cal(int a, char* p, int b)
{
if( strcmp( p, "+") == 0 ) return a+b;
else if( strcmp( p, "-") == 0) return a-b;
else if( strcmp( p, "*") == 0) return a*b;
else if( strcmp( p, "/") == 0) return a/b;
else if( strcmp( p, "%") == 0) return a%b;
else {
cout << "잘못입력 하셨습니다.\n";
exit(1);
}
}
4. 설명
각 문자열을 구분하는 구분자가 ' '(공백)이므로 공백을 입력 받으면 입력이 끝나는 cin을 사용하여서
cin >> a >> p >> b;이렇게 하시면 2개의 정수와 하나의 연산자를 입력받을 수도 있습니다.
하지만 밑 힌트를 보면 문자->숫자로 바꾸는 함수가 나와있어서 하나의 문자열로 입력받은 후 분리하여 계산하는 것이 이 문제의 의도라 생각하여 이렇게 해결하였습니다.
strtok()함수는 처음부터 어느 문자가 나올 때까지의 문자열을 잘라 리턴해주는 함수입니다.
atoi()는 문자->정수형으로 바꾸어 줍니다.
strcmp()함수는 두 문자를 비교하여서 같으면 0을 리턴하는 함수 입니다.
※ strtok(NULL, " ") : 위에서 첫 " "(공백)을 찾은 후 첫 " "(공백)부터 그 다음 " "까지의 문자열을 잘라서 리턴해줍니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 2장 Open Challenge (0) | 2019.04.06 |
---|---|
명품 C++ programming 실습문제 2장 14번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 12번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 11번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 10번 (0) | 2019.04.06 |