UVa 10562 (特殊的输入处理方式) Undraw the Trees

本文详细介绍了如何使用C++代码处理输入数据并进行递归转化,特别关注fgets函数的使用及数据细节处理。通过实例演示了如何在程序中实现数据的读取、分析和递归转换成括号表示法,提供了对输入数据处理的深入理解。

题意:

给出一个二维字符数组,它代表了一棵树。然后将这棵树转化为括号表示法(以递归的形式)。

分析:

这道题最大的特色就是对数据的处理方式,里面用到了一个 fgets() 函数,这个函数的功能有点像c++里面的cin.getline()

函数介绍:

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行

 

学习一下对输入数据的细节处理。

 1 //#define LOCAL
 2 #include <cctype>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 200 + 10;
 8 int n;
 9 char buf[maxn][maxn];
10 
11 void dfs(int r, int c)
12 {
13     printf("%c(", buf[r][c]);
14     if(r+1 < n && buf[r+1][c] == '|')
15     {
16         int i = c;
17         while(i-1 >= 0 && buf[r+2][i-1] == '-')    i--;    //找"---"的左边界 
18         while(buf[r+2][i] == '-' && buf[r+3][i] != '\0')    //‘\0’不满足isspace 
19         {
20             if(!isspace(buf[r+3][i]))    dfs(r+3, i);    //换行符也同样满足isspace 
21             i++;
22         }
23     }
24     printf(")");
25 }
26 
27 void solve()
28 {
29     n = 0;
30     for(;;)
31     {
32         fgets(buf[n], maxn, stdin);
33         if(buf[n][0] == '#')    break;
34         else n++;
35     }
36     printf("(");
37     if(n)
38     {
39         for(int i = 0; i < strlen(buf[0]); ++i)
40             if(buf[0][i] != ' ')
41             {
42                 dfs(0, i);
43                 break;
44             }
45     }
46     printf(")\n");
47 }
48 
49 int main(void)
50 {
51     #ifdef LOCAL
52         freopen("10562in.txt", "r", stdin);
53     #endif
54 
55     int T;
56     fgets(buf[0], maxn, stdin);
57     sscanf(buf[0], "%d", &T);
58     while(T--)    solve();
59 
60     return 0;
61 }
代码君

 

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3991386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值