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, " ") : 위에서 첫 " "(공백)을 찾은 후 첫 " "(공백)부터 그 다음 " "까지의 문자열을 잘라서 리턴해줍니다.

+ Recent posts