首页 > 试题广场 >

路径打印

[编程题]路径打印
  • 热度指数:19628 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给你一串路径,譬如:
a\b\c
a\d\e
b\cst
d\
你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录的首字符向右缩两个空格,就像这样:
a
  b
    c
  d
    e
b
  cst
d
注:同一级的需要按字母顺序排列,不能乱。

输入描述:
    每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,接下来有n行,每行有一个字串表示一个路径,长度小于50。


输出描述:
输出目录结构,每一个测试样例的输出紧跟一个空行。
示例1

输入

4
a\b\c
a\d\e
b\cst
d\
0

输出

a
  b
    c
  d
    e
b
  cst
d
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    char path[10][50];
    char temp[50];
    while(scanf("%d\n", &n) != EOF) {
        if(n == 0)
            break;
        for(int i = 0; i < n; ++i)
            scanf("%s\n", path[i]);

        for(int i = n - 1; i >= 1; --i)
            for(int j = 1; j <= i; ++j)
                if(strcmp(path[j-1], path[j]) > 0) {
                    strcpy(temp, path[j - 1]);
                    strcpy(path[j - 1], path[j]);
                    strcpy(path[j], temp);
                }

        char path1[50], path2[50];
        for(int k = 0; k < n; ++k) {
            strcpy(path2, path[k]);
            int space = 0;
            for(int i = 0, j = 0; i < strlen(path1), j < strlen(path2); ++i, ++j) {
                if(path1[i] == path2[j])
                    space++;
                else
                    break;
            }
            for(int i = space; i < strlen(path2); ++i) {
                for(int j = 0; j < space; ++j)
                    printf(" ");
                while(i < strlen(path2) && path2[i] != '\\') {
                    printf("%c", path2[i++]);
                    space++;
                }
                space++;
                printf("\n");
            }
            strcpy(path1, path2);
        }
        printf("\n");
    }
}

发表于 2023-03-04 12:47:57 回复(0)
有没有大佬帮忙看一下,我这个一直测试样例10通不过,但是我结果对过一模一样,结尾空行也设置了,实在不知道哪里出错了
#include <stdio.h>
#include <string.h>
int main()
{
  int n, i, j, k, min;
  char path[10][50];
  char temp[50];
  scanf("%d", &n);
  for (i = 0; i < n; i++)
  {
    scanf("%s", path[i]);
  }
  for (i = 0; i < n; i++)
  {
    min = i;
    for (j = i + 1; j < n; j++)
    {
      if (strcmp(path[min], path[j]) > 0)
      {
        min = j;
      }
    }
    strcpy(temp, path[min]);
    strcpy(path[min], path[i]);
    strcpy(path[i], temp);
  }
  int num;
  for (i = 0; i < n; i++)
  {
    k = 0;
    num = 0;
    while (i != 0 && path[i][k] == path[i - 1][k]) //判断与上一行相同的字符中有几级结构,记录在num中
    {
      if (path[i][k] == '\\')
      {
        num += 2;
      }
      k++;
    }

    for (j = 0; j < num; j++) //缩进
    {
      printf(" ");
    }

    while (path[i][k] != '\0') //将与上一行不同的目录打印出来
    {
      if (path[i][k] != '\\')
      {
        printf("%c", path[i][k]);
      }
      else if (path[i][k] == '\\' && path[i][k + 1] != '\0')
      {
        printf("\n");
        num += 2;
        for (j = 0; j < num; j++) //缩进
        {
          printf(" ");
        }
      }
      k++;
    }
    printf("\n");
  }
  printf("\n");
  return 0;
}


发表于 2022-11-09 23:03:01 回复(2)