结题报告

2020-02-07 16:00:52来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

结题报告

题目:点此

描述:

在某个字符串(长度不超过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.cnblogs.com/eason66-blog/p/P2705.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:结题报告

下一篇:单调栈