题意:按照图给的树的形状用括号输出这棵树。
思路:按照树前序遍历递归打印,注意一些字符处理的细节,比如说fgets()代替gets()
#include<bits/stdc++.h>
using namespace std;
const int maxn=250;
int n;
char str[maxn][maxn];
void dfs(int r,int c)
{
printf("%c(",str[r][c]);
if(r+1<n&&str[r+1][c]=='|'){
int i=c;
while(str[r+2][i-1]=='-'&&i-1>=0) i--;
while(str[r+2][i]=='-'&&str[r+3][i+1]!='\0'){//这里有一个坑,每一行最后'\n'在'\0'前面。对于'\n'当然也是不用打印,所以我这里是str[r+3][i+1]!='\0'
if(str[r+3][i]!=' ') dfs(r+3,i);
i++;
}
}
printf(")");
}
void solve()
{
n=0;
for(;;){
fgets(str[n],maxn,stdin);//gets
if(str[n][0]=='#') break;
else n++;
}
printf("(");
if(n){
for(int i=0;i<strlen(str[0]);i++){
if(str[0][i]!=' ') {dfs(0,i);break;}
}
}
printf(")\n");
}
int main()
{
int T;
fgets(str[0],maxn,stdin);//这虐坑,我直接scannf()读取T,一直W,看了书上这种写法。以后注意就好。
sscanf(str[0], "%d",&T);
while(T--) solve();
}