zoukankan      html  css  js  c++  java
  • UVa 10562 (特殊的输入处理方式) Undraw the Trees

    题意:

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

    分析:

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

    函数介绍:

    从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋''),如果文件中的该行,不足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] != '')    //‘’不满足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(")
    ");
    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 }
    代码君
  • 相关阅读:
    ie10 css3 transition 过渡
    asp.net之一步一个脚印
    MyEclipse安装aptana插件的问题(link方式)转
    MyEclipse的Aptana插件中配置ZenCoding成功
    PS CS6 安装错误:FATAL: Payload '{3F0238754A5246059DB6A88D4A813E8D} Camera Profiles Installer 6.0.98.0' information not found in Media_db.
    PC客户端的开发插件Eclipse RCP
    Silverlight获取焦点
    广而告知
    wpf窗体定位
    surface开发教程[ScatterView控件] 二.
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3991386.html
Copyright © 2011-2022 走看看