Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int getLength(char array[100])
- {
- int j = 0;
- for (int i = 0; array[i] != '\0'; i++)
- {
- j++;
- }
- return j;
- }
- int toNumber(char a){
- switch(a){
- case '0': return 0;
- case '1': return 1;
- case '2': return 2;
- case '3': return 3;
- case '4': return 4;
- case '5': return 5;
- case '6': return 6;
- case '7': return 7;
- case '8': return 8;
- case '9': return 9;
- default: return -1;
- }
- }
- void printArray(char array[100])
- {
- int length = getLength(array);
- for (int i = 0; i < length; i++)
- {
- cout << array[i];
- }
- }
- bool isNumber(char a)
- {
- return (a >= '0' && a <= '9');
- }
- bool isSymbol(char a)
- {
- switch (a)
- {
- case '+': return true;
- case '-': return true;
- case '/': return true;
- case '*': return true;
- case '=': return true;
- default: return false;
- }
- }
- bool valid(char array[100], char newArray[100], int &j)
- {
- bool number = false, symbol = false, equation = false;
- j = 0;
- int length = getLength(array);
- for (int i = 0; i < length; i++)
- {
- if (isNumber(array[i]) || isSymbol(array[i]))
- {
- newArray[j] = array[i];
- j++;
- }
- }
- if (isSymbol(newArray[0]))
- {
- return false;
- }
- for (int i = 0; i < j; i++)
- {
- if (isSymbol(newArray[i]) && symbol)
- {
- return false;
- }
- if (isSymbol(newArray[i]))
- {
- if (equation && newArray[i] == '=')
- {
- return false;
- }
- symbol = true;
- number = false;
- if (newArray[i] == '=')
- {
- equation = true;
- }
- continue;
- }
- if (isNumber(newArray[i]))
- {
- symbol = false;
- number = true;
- }
- }
- if (equation)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- int recursion(char array[100], int length, int position, int finalNumber = 0)
- {
- if (length-1 == position)
- {
- return finalNumber;
- }
- if (position == 0)
- {
- finalNumber = toNumber(array[position]);
- position++;
- }
- // cout << "Position: " << position << endl;
- //cout << "Array[i]: " << array[position] << endl;
- // cout << "finalNumber: " << finalNumber << endl;
- if (array[position] == '+')
- {
- finalNumber = finalNumber + toNumber(array[position+1]);
- //cout << "Numbre+ : " << finalNumber << endl;
- return (recursion(array, length, position + 1, finalNumber));
- }
- if (array[position] == '-')
- {
- finalNumber = finalNumber - toNumber(array[position+1]);
- // cout << "Numbre- : " << finalNumber << endl;
- return (recursion(array, length, position + 1, finalNumber));
- }
- if (array[position] == '*')
- {
- finalNumber = finalNumber * toNumber(array[position+1]);
- //cout << "Numbre* : " << finalNumber << endl;
- return (recursion(array, length, position + 1, finalNumber));
- }
- if (array[position] == '/')
- {
- finalNumber = finalNumber / toNumber(array[position+1]);
- // cout << "Numbre/ : " << finalNumber << endl;
- return (recursion(array, length, position + 1, finalNumber));
- }
- return recursion(array, length, position+1, finalNumber);
- }
- //3-5+2*2 = 0
- //4+5-6*6+3 = 21
- int main()
- {
- int length = 0;
- char array[100];
- char newArray[100];
- cin.getline(array, 100);
- int number = 0;
- if (valid(array, newArray,length))
- {
- number = recursion(newArray, length, 0);
- cout << number;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement