1978:扩号匹配问题http://ccnu.openjudge.cn/practice/1978/
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!
输出
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。
样例输入
((ABCD(x)
)(rttyy())sss)(
样例输出
((ABCD(x)
$$
)(rttyy())sss)(
我写的代码如下,过不了,出来结果是一样的。
#include"stdio.h"
#include"string.h"
#include"iostream"
#include"stack"
using namespace std;
typedef struct node{
int a;
char ch;
}Node;
int main()
{
char a[105];
int a1[105];
int b1[105];
int i,flag=0,j,k;
Node c,d;
stack b;
while(scanf("%s",a)!=EOF){
for(i=0;i<strlen(a);i++){
if(a[i]=='('){
c.ch=a[i];
c.a=i;
b.push(c);
}
if(a[i]==')'){
if(!b.empty()){
d=b.top();
if(d.ch=='('){
b.pop();
continue;
}
else{
c.a=i;
c.ch=a[i];
b.push(c);
}
}
else{
c.ch=a[i];
c.a=i;
b.push(c);
}
}
else{
continue;
}
}
k=0;
while(!b.empty()){
d=b.top();
a1[k]=d.a;
if(d.ch=='('){
b1[k]=0;
}
if(d.ch==')'){
b1[k]=1;
}
k++;
b.pop();
}
k--;
for(i=0;i<strlen(a);i++){
if(i==a1[k]){
if(b1[k]==0)
putchar('$');
if(b1[k]==1)
putchar('?');
k--;
}
else{
putchar(' ');
}
}
printf("\n");
}
return 0;
}
点击发表框工具栏上面的代码片图标,把代码放到代码片里,否则粘贴过来,容易出现错误,格式也很乱。
象这句话这样的格式就对了。
int main()
{
char a[105];
int a1[105];
int b1[105];
int i,flag=0,j,k;
Node c,d;
stack b;//格式有错误吧?
#include"stdio.h"
#include"string.h"
#include"iostream"
#include"stack"
using namespace std;
typedef struct node{
int a;
char ch;
}Node;
int main()
{
char a[105];
int a1[105];
int b1[105];
int i,flag=0,j,k;
Node c,d;
stack b;
while(scanf("%s",a)!=EOF){
for(i=0;i<strlen(a);i++){
if(a[i]=='('){
c.ch=a[i];
c.a=i;
b.push(c);
}
if(a[i]==')'){
if(!b.empty()){
d=b.top();
if(d.ch=='('){
b.pop();
continue;
}
else{
c.a=i;
c.ch=a[i];
b.push(c);
}
}
else{
c.ch=a[i];
c.a=i;
b.push(c);
}
}
else{
continue;
}
}
k=0;
while(!b.empty()){
d=b.top();
a1[k]=d.a;
if(d.ch=='('){
b1[k]=0;
}
if(d.ch==')'){
b1[k]=1;
}
k++;
b.pop();
}
k--;
for(i=0;i<strlen(a);i++){
if(i==a1[k]){
if(b1[k]==0)
putchar('$');
if(b1[k]==1)
putchar('?');
k--;
}
else{
putchar(' ');
}
}
printf("\n");
}
return 0;
}
#include"stdio.h"
#include"string.h"
#include"iostream"
#include"stack"
using namespace std;
typedef struct node{
int a;
char ch;
}Node;
int main()
{
char a[105];
int a1[105];
int b1[105];
int i,flag=0,j,k;
Node c,d;
stack<Node> b;
while(scanf("%s",a)!=EOF){
for(i=0;i<strlen(a);i++){
if(a[i]=='('){
c.ch=a[i];
c.a=i;
b.push(c);
}
if(a[i]==')'){
if(!b.empty()){
d=b.top();
if(d.ch=='('){
b.pop();
continue;
}
else{
c.a=i;
c.ch=a[i];
b.push(c);
}
}
else{
c.ch=a[i];
c.a=i;
b.push(c);
}
}
else{
continue;
}
}
k=0;
while(!b.empty()){
d=b.top();
a1[k]=d.a;
if(d.ch=='('){
b1[k]=0;
}
if(d.ch==')'){
b1[k]=1;
}
k++;
b.pop();
}
k--;
for(i=0;i<strlen(a);i++){
if(i==a1[k]){
if(b1[k]==0)
putchar('$');
if(b1[k]==1)
putchar('?');
k--;
}
else{
putchar(' ');
}
}
printf("\n");
}
return 0;
}