标签:括号 problem func 问题 ring 距离 class rtt stdio.h
((ABCD(x) )(rttyy())sss)(
((ABCD(x) $$ )(rttyy())sss)( ? ?$
题目链接:http://ica.openjudge.cn/function2/5/
分析:主要是用到栈,这里用数组直接模拟即可。栈里面保存字符串中左括号的下标。扫描字符串,遇到左括号则下标入栈,遇到右括号则检验栈是否为空,不为空则出栈并将对用的左右括号字符位置标记空格,否则将右括号字符对应位置标记“?”。
扫描完成以后,再扫描栈,把多余的左括号字符对应位置标记“$”.
代码:
1 #include<stdio.h> 2 #include<string.h> 3 int main(int argc, char *argv[]) 4 { 5 char str[110]; 6 int len,i,k; 7 int stack[110],end=0; 8 while(scanf("%s",str)!=EOF) 9 { 10 printf("%s\n",str); 11 end=0; 12 len=strlen(str); 13 for(i=0;i<len;i++) 14 { 15 if(str[i]!=‘(‘&&str[i]!=‘)‘) str[i]=‘ ‘; 16 } 17 for(i=0;i<len;i++) 18 { 19 if(str[i]==‘(‘) 20 { 21 stack[end]=i; 22 end++; 23 } 24 else if(str[i]==‘)‘) 25 { 26 if(end>0)//栈不为空,则 27 { 28 k=stack[end-1]; 29 str[k]=‘ ‘;//栈顶的左括号和新遇到的右括号匹配 30 str[i]=‘ ‘; 31 end--;//栈顶元素出栈 32 } 33 else 34 { 35 str[i]=‘?‘;//右括号不匹配 36 } 37 } 38 } 39 while(end>0) 40 { 41 k=stack[end-1]; 42 str[k]=‘$‘; 43 end--; 44 } 45 printf("%s\n",str); 46 } 47 return 0; 48 }
标签:括号 problem func 问题 ring 距离 class rtt stdio.h
原文地址:http://www.cnblogs.com/huashanqingzhu/p/7239039.html