Advertisement
nguyenvanquan7826

cong and nhan

Jul 9th, 2013
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <sstream>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstdio>
  5. #include <cctype>
  6. #include <string>
  7. using namespace std;
  8.  
  9. int check_to_number(string s)
  10. {
  11.     int check = 1, l = s.length();
  12.     for (int i = 0; i<l; i++)
  13.         if (!isdigit(s[i]) && s[i] != '.')
  14.         {
  15.             check = 0;
  16.             break;
  17.         }
  18.     return check;
  19. }
  20.  
  21. float convert_to_number(string s)
  22. {
  23.     float number;
  24.     stringstream ss (s);
  25.     ss >> number;
  26.     return number;
  27. }
  28.  
  29. float process(string s, int l, int r)
  30. {
  31.     int li = 0, ri = r;
  32.     if (check_to_number(s)) return convert_to_number(s);
  33.     else
  34.     {
  35.         int i;
  36.         for (i=li; i<ri; i++) if (s[i] == '+') return process(s.substr(li, i-li), li, i) + process(s.substr(i+1, ri-i), i+1, ri);
  37.         for (i=li; i<ri; i++) if (s[i] == '*') return process(s.substr(li, i-li), li, i) * process(s.substr(i+1, ri-i), i+1, ri);
  38.     }
  39. }
  40.  
  41. int main()
  42. {
  43.     float number;
  44.     string s = "5+8*6+3";
  45.     number = process(s,0,s.length());
  46.     cout<<number;
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement