2005年上海交通大学计算机研究生机试真题

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;
}



你可能感兴趣的:(iterator,交通,BT)