这题思路上解决不难,关键是输入上,直接用cin 是不可以的,因为cin遇到空格就停止。用cin.getline()就可以解决了。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=500;
int T,cur,row;
char g[maxn][maxn];
bool judge_char(char c){if(c!='|'&&c!=' '&&c!='-') return true;return false;
}void dfs(int cur,int row){putchar(g[cur][row]),putchar('(');if(g[cur+1][row]=='|'){///有子树 int left_row;for(left_row=row;g[cur+2][left_row-1]=='-';left_row--);///确定左边界for(;g[cur+2][left_row]=='-';left_row++)if(judge_char(g[cur+3][left_row])&&g[cur+3][left_row]!='\0') dfs(cur+3,left_row);}putchar(')');
}int main(){while(cin>>T){cin.get();///吸收掉缓冲区中的回车 for(int cas=1;cas<=T;cas++){memset(g,0,sizeof(g));cur=0;for(;;){cin.getline(g[cur]+1,maxn);if(g[cur][1]=='#') break;cur++; }g[cur][1]='\0';putchar('(');for(row=1;row<=strlen(g[0]+1);row++)if(judge_char(g[0][row])){dfs(0,row);break; }printf(")\n"); }}return 0;
}