http://ac.jobdu.com/problem.php?pid=1090 路径打印
#include<iostream>
#include<set>
#include<string>
#include<cstdio>
using namespace std;
set<string> iset;
string str,front_str;
int main(void)
{
int i,j,k,n;
while(scanf("%d",&n)!=EOF)
{
if(!n)
break;
iset.clear();
for(i = 0 ; i < n ; ++i)
{
cin>>str;
iset.insert(str); //set集合中的元素默认是按升序来排列的
}
set<string>::iterator it,iter = iset.begin();
str = *iter;
for(i = 0 ; i < str.size() ; ++i)
{
if(str[i]=='\\')
{
if(i < str.size()-1)
{
puts("");
for(j = 0 ; j <=i ; ++j)
putchar(' ');
}
}
else
putchar(str[i]);
}
for(++iter; iter != iset.end() ; ++iter)
{
str = *iter;
it = iter;
front_str = *(--it);
j = 0;
while(str[j] && str[j] == front_str[j])
j++;
while(j>0 && str[j] != '\\') //为了处理下面这个情况 a\bd\d
j--; // a\bt\p
if(str[j] == '\\')
j++;
for(i = j ; i < str.size() ; ++i)
{
if(str[i] == '\\')
{
if(i < str.size()-1)
{
puts("");
for(k = 0 ; k <= i ; ++k)
putchar(' ');
}
}
else
{
if(i == j)
{
puts(""); //输出每行后面的那个换行符
for(k = 0 ; k < i ; ++k)
putchar(' ');
}
putchar(str[i]);
}
}
}
puts("");
puts("");
}
return 0;
}