Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int validateExpression(char*);
- double parseExpression(char*);
- void removeAt(char*, int);
- int main(int argc, char **argv) {
- char *exp;
- if(argc != 2) {
- printf("Error\nFormat : super_calculator \"...expression...\"\n");
- return 1;
- }
- exp = argv[1];
- if(!validateExpression(exp)) {
- printf("Expression not valid !\n");
- }
- double result = parseExpression(exp);
- printf("%f", result);
- return 0;
- }
- int validateExpression(char *exp) {
- unsigned int i, openBrackets = 0, closeBrackets = 0;
- for(i = 0; i < strlen(exp); i++) {
- exp[i] == '(' ? openBrackets++ : 1;
- exp[i] == ')' ? closeBrackets++ : 1;
- }
- return (openBrackets == closeBrackets) && i; // i contains actual length of exp
- }
- double parseExpression(char *exp) {
- unsigned int i, j, lastPos, openBrackets = 0, closeBrackets = 0;
- char *secondExp = NULL;
- for(i = 0; i < strlen(exp); i++) {
- if(exp[i] == '(') {
- // Let's find the corresponding ')' in exp
- openBrackets++;
- j = i + 1 ;
- while(openBrackets != closeBrackets) {
- exp[j] == '(' ? openBrackets++ : 1;
- exp[j] == ')' ? closeBrackets++ : 1;
- j++;
- }
- lastPos = j - 1;
- secondExp = (char*) malloc(lastPos - i + 1);
- memset(secondExp, '\0', lastPos - i + 1);
- memcpy(secondExp, exp + i + 1, lastPos - i - 1);
- printf("%s\n", secondExp);
- }
- }
- if(secondExp != NULL) free(secondExp);
- return 0;
- }
- void removeAt(char *str, int pos) {
- char *src, *dst;
- for (src = dst = str; *src != '\0'; src++) {
- *dst = *src;
- if (*dst != pos) dst++;
- }
- *dst = '\0';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement