Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. int calculate(const char* expr, char **result)
  2. {
  3. if(expr == NULL || result == NULL)
  4. return 1;
  5. if(validate_expression(expr) != 0)
  6. return 2;
  7. *result = malloc(2000);
  8. if(*result == NULL)
  9. {
  10. return 3;
  11. }
  12. int i = 0;
  13. char *ex = (char*)expr;
  14. int flag = 0;
  15. if(*ex == '-')
  16. {
  17. **result = '-';
  18. ex++;
  19. flag = 1;
  20. }
  21. if(flag == 1)
  22. i = 1;
  23. int k = 0;
  24. while(*ex != '-' && *ex != '*' && *ex != '+' && *ex != '\0')
  25. {
  26. *(*result + i) = *ex;
  27. i++;
  28. k++;
  29. ex++;
  30. }
  31. *(*result + i) = '\0';
  32. if(*ex == '\0')
  33. {
  34. return 0;
  35. }
  36.  
  37. char *temp;
  38. char *res;
  39. temp = malloc(500);
  40. if(temp == NULL)
  41. {
  42. free(result);
  43. return 3;
  44. }
  45. char znak = *ex;
  46. k = 0;
  47. while(*(ex + k) != '\0')
  48. {
  49. k++;
  50. }
  51. for(i = 1; i < k; i++)
  52. {
  53. int j = 0;
  54. while(*(ex + i) != '+' && *(ex + i) != '*' && *(ex + i) != '\0')
  55. {
  56.  
  57. if(*(ex + i) == '-')
  58. {
  59. if(j == 0)
  60. {
  61. *(temp + j) = *(ex + i);
  62. i++;
  63. j++;
  64. }
  65. else
  66. break;
  67. }
  68. *(temp + j) = *(ex + i);
  69. j++;
  70. i++;
  71. }
  72. *(temp + j) = '\0';
  73. if(znak == '+')
  74. {
  75. add(*result, temp, &res);
  76. strcpy(*result, res);
  77. free(res);
  78. }
  79. else if(znak == '-')
  80. {
  81. subtract(*result, temp, &res);
  82. strcpy(*result, res);
  83. free(res);
  84. }
  85. else
  86. {
  87. multiply(*result, temp, &res);
  88. strcpy(*result, res);
  89. free(res);
  90. }
  91. znak = *(ex + i);
  92. }
  93. free(temp);
  94. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement