Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 18th, 2012  |  syntax: None  |  size: 2.33 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. /*Geo code
  7. int number = 0; int inNumber = FALSE;
  8. const char* text = "ovo je neki string sa 59 66 broj3vima";
  9. while(*text) {
  10.   if (*text >= '0' && *text <= '9') {
  11.     number = number * 10 + *text - '0';
  12.     inNumber = TRUE;
  13.   } else {
  14.     if (inNumber) printf("saw a number : %d\n", number);
  15.     inNumber = FALSE;
  16.     number=0
  17.   }
  18.   ++text;
  19. }
  20.  treba inNumber=FALSE;number=0*/
  21.  
  22. /*Globals*/
  23.  
  24. int g_pos = 0;
  25. char* g_str = NULL;
  26.  
  27. /*Forward declarations*/
  28.  
  29. int parseE();
  30. int parseE1(int x);
  31. int parseT();
  32.  
  33. void printError();
  34. char getToken();
  35.  
  36. typedef struct Token
  37. {
  38.   int number;
  39.   char oper;
  40. }Token;
  41.  
  42.  
  43. int parseE()
  44. {
  45.  char c = getToken();
  46.  int x = atoi(&c);
  47.  return parseE1(x);
  48. }
  49.  
  50. int parseE1(int x)
  51. {
  52.  char c = getToken();
  53.  if(c == '\0')
  54.   return x; /*fuck*/
  55.  int y = parseT();
  56.  return parseE1(x+y);
  57. }
  58.  
  59. int parseT()
  60. {
  61.  char c = getToken();
  62.  int x = atoi(&c);
  63.  return x;
  64. }
  65.  
  66.  
  67. void printError()
  68. {
  69.  printf("Parsing error incorrect input!\n");
  70.  exit(1);
  71. }
  72.  
  73. char getToken()
  74. {
  75.  char c = g_str[g_pos];
  76.  int number = 0;
  77.  char atNumber = 1;
  78.  while(*g_str)
  79.  {
  80.      if(isdigit(c))
  81.      {
  82.          number = number * 10 + *g_str - '0';
  83.          atNumber = 0;
  84.      }
  85.      else
  86.      {
  87.          if(atNumber)
  88.          {
  89.              printf("%d\n", number);
  90.          }
  91.          number = 0;
  92.          atNumber = 0;
  93.  
  94.      }
  95.      g_str++;
  96.  }
  97.  
  98.  return c;
  99. }
  100.  
  101. Token next()
  102. {
  103.     Token t;
  104.     int number = 0;
  105.     char inNumber = 1;
  106.  
  107.     char c = g_str[g_pos];
  108.  
  109.     if(c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')')
  110.        t.oper = c;
  111.  
  112.     if(isdigit(c))   /*if the char is a digit*/
  113.     {
  114.         c =g_str[g_pos+1]; /*set c to the next character*/
  115.  
  116.         if(isdigit(c))
  117.         {
  118.             number = number * 10 + c * '0';
  119.             inNumber = 0;
  120.         }
  121.         else
  122.         {
  123.             t.number = atoi(&c);
  124.             number = 0; inNumber = 0;
  125.         }
  126.     }
  127.  
  128.     g_pos++;
  129.  
  130.     return t;
  131. }
  132.  
  133. int evaluate(char *str)
  134. {
  135.  g_str = str;
  136.  parseE();
  137. }
  138.  
  139. int main()
  140. {
  141.  /*char* test = "2+9";
  142.  int p = evaluate(test);
  143.  printf("Result: %d\n", p);*/
  144.  
  145.  g_str = "++--";
  146.  Token p;
  147.  p = next();
  148.  printf("%c", p.oper);
  149.  p = next();
  150.  printf("%c", p.oper);
  151.  
  152.  return 0;
  153. }