有如下规定
1,()是个合法表达式。
2,如果S是合法表达式,则(S)也是个合法表达式。
3,如果A和B都是合法表达式,则AB也是合法表达式。
4,其他的表达式都不是合法表达式
给你一个包含“(”和“)”的表达式,中间可能有多个合法表达式(只对满足规定的最长表达式进行计数,如“(())”和“()()” 都只算一个,不是两个),那这些合法表达式有多少个呢?
★数据输入
输入为一个长度不超过1000的包含“(”和“)”的非空字符串。
★数据输出
输出合法表达式的个数。
输入示例
()(()(()(()
输出示例
4
代码:
- #include<iostream.h>
- #include<stack>
- #include<string.h>
- using namespace std;
- int main()
- {
- char str[1001];
- int i,n=0;
- stack<int> sta;
- scanf("%s",&str);
- for(i=0;i<strlen(str);i++)
- {
- if(str[i]=='(') { sta.push(i);} //入栈。
- else if(str[i]==')')
- {
- if(!sta.empty())
- {
- str[i] = 1;
- str[sta.top()] = 1;
- sta.pop();
- }
- }
- }
- for(i=0;i<strlen(str);i++)
- if(str[i]==1&&str[i+1]!=1) n++;
- printf("%d/n",n);
- return 0;
- }