C語言 解決括號匹配問題和逆波蘭表示式求值為題

2021-08-28 03:01:23 字數 1538 閱讀 1512

##1、括號匹配問題:

解決思路:

ch = topnumandtop (&s);//返回棧頂元素並出棧

switch (ch)

break;

case '[':

if (per[i] != ']')

break;

case '')

break;

}} }

if (isempty (&s) == 1) //判斷棧是否為空(等1為空,等0不為空)

else

}測試**:

void test_match_brackets()	//括號匹配問題

}";//右括號比左括號多

char arr2 = "(())abc";//左右括號次序匹配錯誤

char arr3 = "(())abc"; //左右括號匹配正確

char arr4 = "(())abc"; //左括號比右括號多

matchbrackets (arr1);

matchbrackets (arr2);

matchbrackets (arr3);

matchbrackets (arr4);

}

執行結果:

###2、逆波蘭表示式求值

####什麼是逆波蘭表示式:

逆波蘭表示法也叫字尾表示法,即操作符號都置於運算元的後面,逆波蘭表示法可以不用括號來標識操作符的優先順序。例如:3+4 是乙個中綴表示式,轉換成逆波蘭表示式為34+

思路:

int reversepolishexpression (const char* str)	//逆波蘭表示式求值

if (*arr == ' ' && *p1 != ' ')

if ((*arr == '+') || (*arr == '-') || (*arr == '*') || (*arr == '/'))

}arr++;

} return topnumandtop (&s);

}

測試**:

void test_reversepolishexpression ()//逆波蘭表示式

執行結果:

棧解決 括號匹配問題和逆波蘭表示式

所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...

c 解決括號匹配及逆波蘭表示式

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。思路 當棧為空時入棧,沒遇到左括號時一直入棧。當出現左括號時比較與棧頂元素是否匹配,如果匹配則出棧。在完成後如果棧仍然不為空則說明存在不互相匹配的括號。include includ...

括號匹配 逆波蘭函式(棧)

1.括號匹配 int isbrackets char ch 判斷括號函式 ch return0 void matchbrackets const char str ch stacktop s if ch str i ch str i str i 檢測當前括號是否與棧頂括號匹配 stackpop s ...