題目:點此
描述:
在某個字串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何一個左括號都從內到外與在它右邊且距離最近的右括號匹配,寫一個程式,找到無法匹配的左括號和右括號,輸出原來字串,并在下一行標出不能匹配的括號,不能匹配的左括號用"$"標注,不能匹配的右括號用"?"標注.
思路:
定義一個陣列存要輸出的字符($,?, (空格))
按常規的括號匹配問題去做(遇到左括號入堆疊,遇到右括號出堆疊),只是遇到右括號不匹配時陣列對應位置賦為?,左括號不匹配時對應位置賦為$,匹配的對應位置賦為空格,最后輸出原字串后輸出此字符陣列即可,
犯的錯誤:
EOF(-1)僅限用于scanf字符陣列,不能用于字串,否則

識訓:
EOF(-1)不能用于字串,讀入字串可以這樣:
while(getline(cin,c))//string c
代碼:
1 #include <stack> 2 #include <iostream> 3 using namespace std; 4 char a[101]; 5 stack <int> b; 6 string c; 7 int main(){ 8 while(getline(cin,c)){ 9 for(int i=0;i<c.length();i++){ 10 a[i]=' '; 11 if(c[i]=='('){ 12 b.push(i); 13 } 14 if(c[i]==')'){ 15 if(b.empty()){ 16 a[i]='?'; 17 } 18 else{ 19 b.pop(); 20 } 21 } 22 } 23 while(!b.empty()){ 24 int i=b.top(); 25 b.pop(); 26 a[i]='$'; 27 } 28 a[c.length()]='\0'; 29 cout << c << "\n" << a << "\n"; 30 } 31 return 0; 32 }View Code
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67297.html
標籤:C++
上一篇:結題報告
下一篇:單調堆疊
