이새벽에 잠이 안와.. 서는 아니고
친구 과제를 해 주다가 오기가 생겨서 해서 올려봅니다.
대충 이 소스의 결과는 이렇습니다.
한줄로 수식을 입력받아 덧셈과 뺄셈 연산을 하는데, 중간에 공백이 있어도 계산을 잘 해줍니다.
막상 글을 적고나니 어렵게도 아니고 그냥 계산을 괴랄하게 하는 방법에 불과했군요.
.....
예외처리는 당장 에러 안나게만 했습니다.
코드 전문은 아래에 있고, cpp파일 첨부했습니다.
혹시 필요하신 분은 잘 사용하시길...
태클이나 개선점도 받습니다.
새벽에 이게 뭐하는짓이야! orz
---------------------------------------------------------------------------------------
// in cpp
#include <iostream>
#include <string>
using namespace std;
int tenreturns(int index) // 자릿수 리턴 함수. 5자리까지만 입력가능
{
if(index == 0)
return 1;
else if (index == 1)
return 10;
else if (index == 2)
return 100;
else if (index == 3)
return 1000;
else if (index == 4)
return 10000;
else if (index == 5)
return 100000;
else
return 1;
}
void main()
{
string longchar; // 문자열 선언
getline(cin,longchar); // 문자열 입력
int index = longchar.length(); // 문자열 길이를 입력받음
int numbers[100][5]; // 숫자저장
for(int i = 0 ; i < 100 ;i++) // 배열초기화
{
for(int j = 0 ; j < 5 ; j++)
{
numbers[i][j] = NULL;
}
}
int adder[20]; // 부호저장
for(int i = 0; i < 20 ; i++) // 배열초기화
{
adder[i] = NULL;
}
int adders = 0; // 1차원배열, 부호판단 인덱스
int sindex = 0; // 2차원배열 인덱스
int howlong[100];
for(int i = 0 ; i<100 ; i++)
{
howlong[i] = NULL;
}
for(int i = 0; i < index ; i++) // 단어 하나하나 판별하는 과정
{
if(longchar[i] == ' ') {}
else if(longchar[i] == '+')
{
adder[adders] = 0; // 0이면 더한다
howlong[adders] = sindex; // 몇개의 단어가 들어왔는지 체크
adders++;
sindex = 0; // 초기화
}
else if(longchar[i] == '-')
{
adder[adders] = 1; // 1이면 뺀다
howlong[adders] = sindex; // 몇개의 단어가 들어왔는지 체크
adders++;
sindex = 0; // 초기화
}
else if(isdigit(longchar[i]) == 0)
{
cout<<"지정된 부호나 숫자만 입력하세요. 프로그램을 종료합니다"<<endl;
break;
} // 부호, 스페이스 판별. 숫자가 아닌경우 에러발생
else
{
numbers[adders][sindex] = (int)(longchar[i]) - 48;
sindex++; // 2차원을 하나늘림
}
if( i+1 == index )
{
howlong[adders] = sindex;
}
}
int fullnumbers[100]; // 배열을 숫자로 만들기 위한 일차원배열 선언
for(int a= 0; a<100;a++) // 초기화
{
fullnumbers[0]=NULL;
}
for(int a = 0; a < 100 ; a++) // 이차원배열을 일차원배열로 수정
{
int num = 0;
for(int b = 0; b < howlong[a] ; b++)
{
num += (numbers[a][howlong[a]-b-1] * tenreturns(b));
}
fullnumbers[a] = num;
num = 0;
}
//계산부분
int sum = 0;
for(int i = 0 ; i < 100 ; i++)
{
if(i==0)
{
sum+=fullnumbers[i];
continue;
}
else
{
if(adder[i-1] == 0)
{
sum+=fullnumbers[i];
continue;
}
else if (adder[i-1] == 1)
{
sum-=fullnumbers[i];
continue;
}
}
}
cout<<"계산값을 출력합니다 : "<<sum<<endl;
}
---------------------------------------------------------------------------------------