简简单单 单单纯纯 我就是想坚持下去 到以后发现我竟然是这样入门的 自己是不是都会觉得很奇葩
#include<cstdio>
#include<cctype>
#include<cstring>
using namespace std;
const int maxn = 200 + 10;
int n;
char buf[maxn][maxn];
void dfs(int r, int c) {
printf("%c(", buf[r][c]);
if(r+1 < n && buf[r+1][c] == '|'){
int i = c;
while(i-1 >= 0 && buf[r+2][i-1] == '-') i--;
while(buf[r+2][i] == '-' && buf[r+3][i] != '\0'){
if(!isspace(buf[r+3][i])) dfs(r+3, i);
i++;
}
}
printf(")");
}
void solve()
{
n = 0;
for(;;){
fgets(buf[n], maxn, stdin);
if(buf[n][0] == '#') break; else n++;
}
printf("(");
if(n){
for(int i = 0; i < strlen(buf[0]); i++)
if(buf[0][i] != ' ') { dfs(0, i); break; }
}
printf(")\n");
}
int main()
{
int T;
fgets(buf[0], maxn, stdin);
sscanf(buf[0], "%d", &T);
while(T--) solve();
return 0;
}
本文介绍了一种使用C++实现的表达树解析算法,该算法通过深度优先搜索(DFS)来解析输入的字符数组,并构造出表达式的树形结构。通过对每层字符的判断与递归调用,最终输出完整的表达式结构。
509

被折叠的 条评论
为什么被折叠?



