#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NaN 0xaFFFFFF
struct com {
int digit;
char oper;
int nextdigit;
} parser = {NaN, NULL, NaN};
int isStrDigit(char* c)
{
int i;
for(i=0;i<strlen(c);i++)
{
if(!isdigit(c[i]) || c[i] == 0)
return 0;
}
return 1;
}
int main()
{
char expression[1024] ;
scanf("%s", expression);
printf("\n%s\n", expression);
char* c = expression;
char* mem = (char*)malloc(sizeof(char*) * 256);
do
{
char* ch = c;
char* cptr = mem;
*cptr = 0;
if(isdigit(*ch))
{
if(isdigit(*(ch+1)))
{
do
{
*cptr++ = *ch++;
}while(isdigit(*ch));
*(cptr++) = 0;
c = ch-1;
}
else
{
*cptr = *ch;
*(cptr+1) = 0;
}
}
else
{
if(parser.digit != NaN && parser.oper == 0)
{
parser.oper = *ch;
}
else
{
printf("Error in expression!");
free(mem);
exit(1);
}
}
if(*mem != '\0')
{
if(parser.digit == NaN) // first runing
{
parser.digit = atoi(mem) ;
}
else if(parser.nextdigit == NaN)
{
parser.nextdigit = atoi(mem) ;
}
}
if(parser.nextdigit != NaN)
{
switch(parser.oper)
{
case '+':
{
parser.digit += parser.nextdigit;
parser.nextdigit = NaN;
break;
}
case '-':
{
parser.digit -= parser.nextdigit;
parser.nextdigit = NaN;
break;
}
default:
{
printf("\nThis command is not supported!");
free(mem);
exit(1);
}
}
parser.oper = 0;
}
int i;
for(i=0;i<256;i++) mem[i] = 0;
c++;
}while(*c);
printf("\n%d", parser.digit);
getchar();
return 0;
}
Comments