[英]Appropriate data structure for matching grouping symbols?
我應該編寫一個程序,將算術表達式作為輸入。 程序輸出表達式是否包含匹配的分組符號,如果平衡則計算表達式結果。
例如,算術表達式{25 + (3 – 6) * 8}
是平衡的,其結果等於1
。
7 + 8 * 2
是平衡的,其結果等於23
。
但是,表達式5 + {(13 + 7) / 8 - 2 * 9
不包含匹配的分組符號,因此我們不會計算其結果。
什么是最好的數據結構(鏈表、堆棧等)?
使用堆棧。 最后一個打開的括號應該是第一個關閉的。
表達式從左到右開始。
繼續將左括號推入堆棧。
當你找到一個右括號時,檢查它是否等於棧頂(最后打開的應該先關閉),如果是,則將其彈出。 如果不是,則表達式不平衡。
如果堆棧最后為空,則表達式是平衡的。
#include <iostream>
#包括
使用命名空間標准;
int main(){
字符串 str;
cout<<"請輸入字符串:";
std::getline (std::cin,str);
布爾標志=真;
堆棧 st;
for(int i=0;i<str.size();i++){
if( (str.at(i)>='0' && str.at(i)<='9') || str.at(i)=='+' || str.at(i)== '-' || str.at(i)=='/'|| str.at(i)=='*' || str.at(i)==' ' ){
// cout<<str.at(i) <<"來了"<<endl;
繼續;
}
if( str.at(i)=='{' || str.at(i)=='(' ){
st.push(str.at(i));
}
else if(!st.empty() &&((st.top() == '{' && str.at(i) == '}') || (st.top() == '(' && str .at(i) == ')')))
聖流行();
別的{
標志=假;
休息;
}
}
if(!st.empty()){
cout<<"不匹配"<<"\\n";
}別的{
如果(標志)
cout<<"匹配"<<"\\n";
別的
cout<<"不匹配"<<"\\n";
}
返回0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.