比较简单的排序,由于单词数目很多,数组一定要开够
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
using namespace std;
int c_cmp(const void *_a,const void *_b)
{
char *a=(char *)_a;
char *b=(char *)_b;
return strcmp(a,b);
}
char word[510000][210];
int main()
{
char t;
int i=0,j=0;
memset(word,0,sizeof(word));
while(scanf("%c",&t)==1)
{
word[i][j]=t;
if(isalpha(t))
j++;
else
{
if(isalpha(word[i][0]))
i++;
j=0;
}
}
for(int k=0; k<510000; k++)
for(j=0; j<210; j++)
{
if(isupper(word[k][j]))
word[k][j]+=32;
if(!isalpha(word[k][j]))
{
word[k][j]='\0';
break;
}
}
qsort(word,510000,sizeof(word[0]),c_cmp);
for(int k=0; k<510000; k++)
if(isalpha(word[k][0])&&strcmp(word[k],word[k-1])!=0)
puts(word[k]);
return 0;
}