擴號匹配問題

2021-09-21 15:44:51 字數 1679 閱讀 1355

總時間限制: 1000ms  記憶體限制: 65536kb

描述

在某個字串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用"$"標註,不能匹配的右括號用"?"標註.

輸入輸入包括多組資料,每組資料一行,包含乙個字串,只包含左右括號和大小寫字母,字串長度不超過100

注意:cin.getline(str,100)最多只能輸入99個字元!

輸出對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由"$","?"和空格組成,"$"和"?"表示與之對應的左括號和右括號不能匹配。

樣例輸入

((abcd(x)

)(rttyy())sss)(

樣例輸出

((abcd(x)

$$)(rttyy())sss)(

? ?$

分析:主要是用到棧,這裡用陣列直接模擬即可。棧裡面儲存字串中左括號的下標。掃瞄字串,遇到左括號則下標入棧,遇到右括號則檢驗棧是否為空,不為空則出棧並將對用的左右括號字元位置標記空格,否則將右括號字元對應位置標記「?」。

掃瞄完成以後,再掃瞄棧,把多餘的左括號字元對應位置標記「$」.

**:

1 #include2 #include

3int main(int argc, char *ar**)417

for(i=0;i)

1824

else

if(str[i]==')'

)2533else

3437}38

}39while(end>0)40

45 printf("

%s\n

",str);46}

47return0;

48 }

遞迴的**:

1 #include2 #include

3int fun(char *str,int len,int nowindex);//

nowindex表示當前掃瞄到的字元下標。返回右括號的下標或-1

4int count=0;//

表示當前已經遞迴儲存的左括號的個數

5int main(int argc, char *ar**)

617 count=0

;18 fun(str,len,0

);19 printf("

%s\n

",str);20}

21return0;

22}23int fun(char *str,int len,int nowindex)//

nowindex表示當前掃瞄到的字元下標。返回右括號的下標或-1

2437}38

else

if(str[nowindex]=='')

39return fun(str,len,nowindex+1

);40

else

4151

else

5256}57

}58return -1

;59 }

擴號匹配問題

描述 在某個字串 長度不超過 100 中有左括號 右括號和大小寫字母 規定 與常見的 算術式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註 不能匹配的右括號用 標註。輸入...

1203 擴號匹配問題

時間限制 1000 ms 記憶體限制 65536 kb 提交數 1424 通過數 744 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下...

1203 擴號匹配問題

1203 擴號匹配問題 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下...