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;
}