【算法编程】括号表达式问题

有如下规定
1,()是个合法表达式。
2,如果S是合法表达式,则(S)也是个合法表达式。
3,如果A和B都是合法表达式,则AB也是合法表达式。
4,其他的表达式都不是合法表达式
给你一个包含“(”和“)”的表达式,中间可能有多个合法表达式(只对满足规定的最长表达式进行计数,如“(())”和“()()” 都只算一个,不是两个),那这些合法表达式有多少个呢?
★数据输入
输入为一个长度不超过1000的包含“(”和“)”的非空字符串。
★数据输出
输出合法表达式的个数。
输入示例

()(()(()(()

输出示例
4

 

代码:


  1. #include<iostream.h>
  2. #include<stack>
  3. #include<string.h>
  4. using namespace std;
  5. int main()
  6. {
  7. char str[1001];
  8. int i,n=0;
  9. stack<int> sta;
  10. scanf("%s",&str);
  11. for(i=0;i<strlen(str);i++)
  12. {
  13. if(str[i]=='(') { sta.push(i);} //入栈。
  14. else if(str[i]==')')
  15. {
  16. if(!sta.empty())
  17. {
  18. str[i] = 1;
  19. str[sta.top()] = 1;
  20. sta.pop();
  21. }
  22. }
  23. }
  24. for(i=0;i<strlen(str);i++)
  25. if(str[i]==1&&str[i+1]!=1) n++;
  26. printf("%d/n",n);
  27. return 0;
  28. }
  • 你可能感兴趣的:(【算法编程】括号表达式问题)