輸入是一個數學表達式(例如1 + 2 + 3/4 * 5。或((1 + 2)+3)/ 4)* 5。 ...)帶點'。'作爲輸入的結束。檢查數組中的元素
我必須寫的算法確定該表達式被寫入正確以下一些算術規則:
-all括號必須關閉
- 兩個運營商不能站在旁邊彼此(例如,2 ++ 2)
- 兩個數字不能站近彼此(例如12 + 2)
-there是沒有 '*' 的數和一個括號(例如2之間(2 + 2) * 3)
- 僅限數字,運算符和三種括號可以使用
- 圓括號之間不能有空格(例如, ())
我幾乎把它們都覆蓋了但我只是不知道如何讓算法認識到這個例子是錯誤的: 9 + 6/5 *(1 + [2 + 3) ]。 - 括號的順序混合在一起
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int main()
{
char expression[MAX];
int i, j, parenthesisNr = 0, mistake = 0, tmpOp;
for (i = 0; i < MAX; i++){
scanf("%c", &expression[i]);
if (expression[i] < '(' || expression[i] > '9'){
if (expression[i] != '[' && expression[i] != ']' && expression[i] != '{' && expression[i] != '}')
mistake ++;
}
else if (expression[i] == '.'){
break;
}
}
for (i = 0; i < MAX; i++){
if (expression[i] == '(' || expression[i] == ')'){
parenthesisNr ++;
}
if (expression[i] == '*' || expression[i] == '+' || expression[i] == '/' || expression[i] == '-'){
tmpOp = expression[i];
for (j = i + 1; j < i+2; j++){
if (expression[j] == tmpOp){
mistake ++;
}
}
}
if (expression[i] >= '0' && expression[i] <= '9'){
for (j = i + 1; j < i + 2; j++){
if (expression[j] == '(' || expression[j] == '[' || expression[j] == '{' || (expression[j] >= '0' && expression[j] <= '9')){
mistake ++;
}
}
}
}
if (parenthesisNr % 2 == 1){
printf ("WRONG");
}
else if (mistake > 0){
printf ("WRONG");
}
else{
printf ("CORRECT");
}
return 0;
}
如您在[上一個問題](http://stackoverflow.com/a/40561977/4142924)中通過使用堆棧回答,以匹配對。 –