• 字符串分拆
  • 排序
  • 比较相邻路径相同层数
  • 输出
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
using namespace std;

const int maxn=10;
vector <string> s[maxn];//路径

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        memset(s,0,sizeof(s));//初始化
        if(n==0)break;
        for(int i=0;i<n;i++){
            string a;
            cin>>a;
            int index=0;//路径字符串数组下标
            string temp;
            for(int j=0;j<a.size();j++){//输入
                if(a[j]!='\\'&&j!=a.size()-1){
                  temp+=a[j];
                }
                else if(a[j]=='\\') {//注意要转义;遇到\就存入一个
                  s[i].push_back(temp);
                  temp.clear();
                }
                else {//最后一个字符不是\
                  temp+=a[j];
                  s[i].push_back(temp);
                  temp.clear();
                }
            }
        }
        sort(s,s+n);//排序
        
        for(int j=0;j<s[0].size();j++){//第一个路径输出
              for(int k=1;k<=j;k++)printf("  ");
              cout<<s[0][j]<<endl;
        }
        
        for(int i=1;i<n;i++){
          int same=0;//和前一路径相同层数
          while(s[i][same]==s[i-1][same]&&same<s[i-1].size())same++;

            for(int j=same;j<s[i].size();j++){
                for(int k=1;k<=j;k++)printf("  ");
                cout<<s[i][j]<<endl;
            }
         }
        
        printf("\n");
    }
    return 0;
}