Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment