trenka

Untitled

Sep 21st, 2021
756
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. static inline long myatoi(char *p, char **end)
  2. {
  3.         long res = 0;
  4.  
  5.         while (*p >= '0' && *p <= '9')
  6.                 res = res * 10 + *p++ - '0';
  7.         *end = p;
  8.         return res;
  9. }
  10.  
  11. char *calc(const char *str) {
  12.         const size_t len = strlen(str);
  13.  
  14.         char *expr = malloc(len + 1), *pexpr = expr;
  15.         strncpy(expr, str, len);
  16.  
  17.         long total = myatoi(pexpr, &pexpr);
  18.         while (*pexpr) {
  19.                 if (pexpr[0] == 'p') {
  20.                         pexpr += 4;
  21.                         total += myatoi(pexpr, &pexpr);
  22.                 } else if (pexpr[0] == 'm') {
  23.                         pexpr += 5;
  24.                         total -= myatoi(pexpr, &pexpr);
  25.                 }
  26.         }
  27.         snprintf(expr, len, "%li", total);
  28.  
  29.         return expr;
  30. }
  31.  
RAW Paste Data