【题目描述】
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)
【输入】
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。
【输出】
按字典序输出这些单词,重复的单词只输出一次。
【输入样例】
She wants to go to Peking University to study Chinese
【输出样例】
Chinese
Peking
She
University
go
study
to
wants
下面是我写的代码,跟大多数人思路不一样。但是能实现,提交的时候全部错误。
#include<iostream>
#include<cstdio>
using namespace std;
char a[101][51];
int n[101];
int k=0;//一共会有k个单词被输入进去
int comp(char x[],char y[]);
char format(char c);
void px();
void px()
{
for(int i=0;i<k;i++)
for(int j=0;j<k-i;j++)
{
if(comp(a[j],a[j+1])==1) swap(a[j],a[j+1]);
}
}
int comp(char x[],char y[])// x排在前返回1 ,x排在后返回0,一样的返回2
{
int lx=strlen(x);
int ly=strlen(y);
if(lx>ly)
{
for(int i=0;i<ly;i++)
{
if(format(x[i])>format(y[i])) return 1;
else if(format(x[i])<format(y[i])) return 0;
}
return 0;
}
else if(lx<ly)
{
for(int i=0;i<lx;i++)
{
if(format(x[i])>format(y[i])) return 1;
else if(format(x[i])<format(y[i])) return 0;
}
return 1;
}
else
{
for(int i=0;i<lx;i++)
{
if(format(x[i])>format(y[i])) return 1;
else if(format(x[i])<format(y[i])) return 0;
}
return 2;
}
}
char format(char c)
{
char b=c;
if(b<'Z' && b>'A') b-=26;
return b;
}
void pd()
{
for(int i=1;i<=k;i++)
for(int j=0;j<i;j++)
if(comp(a[j],a[i])==2)
{
n[i]=1;
break;
}
}
int main()
{
cin>>a[k];
while(cin.get()!='\n')
{
k++;
cin>>a[k];
}
px();
pd();
for(int j=0;j<=k;j++)
{
if(n[j]==0)
cout<<a[j]<<endl;
}
return 0;
}