簡單計算器的實現

2021-07-03 20:11:25 字數 3678 閱讀 6749

計算器

問題描述: 輸入乙個簡單四則運算表示式字串,計算該表示式的值 

注: 1、表示式只含 +, -, *, /, (, ), 四則運算符 

2、表示式數值只包含整數(0-9),每個運算元可以是多位,且不會出現0作為除數的情況 

3、要考慮加減乘除按通常四則運算規定的計算優先順序 

4、除法用整數除法,即僅保留除法運算結果的整數部分。比如80/3=26。輸入表示式保證無0作為除數情況發生 

5、輸入字串一定是符合題意合法的表示式,其中只包括數字字元和四則運算符字元,除此之外不含其它任何字元,不會出現計算溢位情況

要求實現函式:  

int calculate(int len,char *expstr) 

【輸入】 int len: 字串長度; char *expstr: 表示式字串; 

【輸出】 無 

【返回】 計算結果  

• 示例  

1) 輸入:char *expstr = 「-3*(-200)-(-3*(-5-2*10)/(4+3-17)*9)」 

函式返回:663

2) 輸入:char *expstr = 「8/3*3」

函式返回:6

#include "stdafx.h"

#include#include#includeusing namespace std;

char*vec2char(vectorvec, char*str)

//計算不帶括號的表示式的值

int calculate_without_bracket(vector&substr)

} if (*it == '*' || *it == '/')

if (it1 != substr.begin())

else

else if (*(it1 - 1) == '+')//這一次的乘除運算之前不可能出現別的「*」或「/」

else

it1++;}}

else if (it1 == substr.begin() && *it1 == '-')

it1++;

it2 = it + 1;

if (*it2 == '-')

p = bb.begin();

while (p != bb.end())

while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)

if (*it == '*')

aa = f1*f2;

else

aa = f1 / f2;

if (flag1)

aa = -aa;

char*ss = new char[100];

_itoa(aa, ss, 10);

if (it1 == substr.begin())

it = substr.begin();

}else

+ 1, aa+'0');

it = iter + 1;

}} else

//if (substr.size() == 1)

// return (*substr.begin() - '0');

} it = substr.begin();

while (it != substr.end())

else

}p = bb.begin();

while (p != bb.end())

it = it1;

it2 = it + 1;

if (*it2 == '-')//因為每次去括號時,都會對多個「-」

//號進行合併,這裡不會出現多於兩個「-」相連的情況

while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)

if (*it == '+')

if (flag2)

aa = -f1 - f2;

else

aa = -f1 + f2;

else

if (flag2)

aa = -f1 + f2;

else

aa = -f1 - f2;

char*ss = new char[100];

_itoa(aa, ss, 10);

int c = 0;

substr.erase(substr.begin(), it2);

while (*ss != '\0')

aa + '0');

it = substr.begin();

}} else if

//因為每次都是從左到右一次只計算兩個數,除了第乙個符號是「-」外,另一種

//情況下第乙個運算元一定是正數,只需考慮第二個運算元的符號

(*it == '+' || *it == '-')

while (*it1 - '0' >= 0 && *it1 - '0' <= 9 && it1 - substr.begin() >= 0)

if (it1 != substr.begin())

it1++;

p = bb.begin();

while (p != bb.end())

while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)

if (*it == '+')

if (flag1)

aa = f1 - f2;

else

aa = f1 + f2;

else

if (flag1)

aa = f1 + f2;

else

aa = f1 - f2;

char*ss = new char[100];

_itoa(aa, ss, 10);

if (it1 == substr.begin())

aa + '0');

it = substr.begin();

}else

it = iter + 1;

}} else

}return atoi(vec2char(substr, str));

}//去括號,每次找到第一對連續匹配的括號,然後用calculate_without_bracket函式

//計算括號裡的表示式的值,計算後的結果插入原表示式,返回true。

//如果原表示式沒有括號,返回false

bool erase_bracket(vector&str)

else if (str[k] == '(')

} else

}if (flag) }

return flag;

}/*vectorchar2vec(vector&vec, char*str)

return vec;

}*///整體表示式計算函式,每次呼叫erase_bracket函式先計算括號裡的值

//直到消除所有的括號,最後呼叫calculate_without_bracket計算剩下的無括號表示式的值

int calculate(int len, char *expstr)

return calculate_without_bracket(str);

}int _tmain(int argc, _tchar* argv)

簡單計算器的實現

題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...

簡單計算器的實現

計算器 問題描寫敘述 輸入乙個簡單四則運算表示式字串,計算該表示式的值 注 1 表示式僅僅含 四則運算符 2 表示式數值僅僅包括整數 0 9 每乙個運算元能夠是多位。且不會出現0作為除數的情況 3 要考慮加減乘除按通常四則運算規定的計算優先順序 4 除法用整數除法,即僅保留除法運算結果的整數部分。比...

C 實現簡單計算器

要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std char str 200 儲存表示式字串 int mat...