IT/솔루션) 난 정말C... 없다구요

21장. 실력 다지기 연습문제 03 ) 문제 5 [문자열로 입력된 연산문의 분석]

돔찌 2019. 4. 17. 20:19

<2016. 9. 26. 21:00>

21장. 실력 다지기 연습문제 03 ) 문제 5 [문자열로 입력된 연산문의 분석]

 

/*
프로그램 사용자로부터 다음과 같은 형식의 수식을 문자열의 형태로 입력 받는다.
23+25
105-25
120*4
365/15
그리고 나서 읽어들인 문자열을 분석하여 두 개의 피연산자와 하나의 연산자 정보를 추출하여 연산을 진행하고, 연산의 결과를 출력해야 한다.
단 문제의 수준을 조금 낮추기 위해서 다음과 같은 제한사항을 두겠다.
- 다음의 형태로 문자열을 읽어들일 수 있도록 수식에는 공백을 삽입하면 안 된다.
 scanf("%s", buf);
- 연산의 종류는 사칙연산으로 제한을 한다.
- 정수형 연산을 진행한다. 따라서 피연산자는 반드시 젖ㅇ수이여야 한다.
- 두 개의 피연산자와 하나의 연산자로만 문장을 구성해야 한다.
- 피연산자는 반드시 양의 정수이여야 한다.
수준이 좀 높은 편이다.
*/
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)
int main(void) {
	char buf[10];
	int len = 0;
	int i, j;
	int ten = 1;
	int back = 0;
	int up = 0;
	int differ = '1' - 1;
	char what;
	printf("수식 입력 : ");
	scanf("%s", buf);
	while (buf[len] != '\0')
	  len++;
	for (i = 0; i < len; i++) {
		if (buf[i]<'0' || buf[i]>'9') {
			for (j = i - 1; j >= 0; j--) {
				up = up + ((buf[j]-differ) * ten);
				ten *= 10;
			}
			what = buf[i] -differ;
			break;
		}
	}
	ten = 1;
	for (j = len-1; j > i; j--) {
		back = back + ((buf[j] - differ)*ten);
		ten *= 10;
	}
	switch (buf[i]) {
		case '+':
		  printf("%d%c%d=%d\n", up, '+', back, up + back);
		break;
		case '-':
		  printf("%d%c%d=%d\n", up, '-', back, up - back);
		break;
		case '*':
		  printf("%d%c%d=%d\n", up, '*', back, up * back);
		break;
		case '/':
		  printf("%d%c%d=%d\n", up, '/', back, up / back);
		break;
	}
	system("pause");
	return 0;
}