题目来源:https://cn.vjudge.net/problem/UVA-10815
题目大意:
找出文本里各不相同的单词然后按顺序排列。
解题思路:
用set,set中元素唯一(集合概念)且有序。
PS:分隔单词的不只有空格/空行(stringstream可把所有非单词字符转为空格),新的一行Ctrl+Z算结束。
代码以后有时间会改成C++,求放过qaq
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 300
#define M 5010
void asend(char p[][N], int m);
int main()
{
int len, i, j, k, flag, d=0;
char s[N], di[M][N], wo[N];
while (gets(s))
{
len = strlen(s);
for (i=0,j=0;i<=len;i++)
{
if ((s[i]>='A' && s[i]<='Z') || (s[i]>='a' && s[i]<='z'))
{
if (s[i]<'a')
{
wo[j] = s[i] + 32;
j++;
}
else
{
wo[j] = s[i];
j++;
}
}
else
{
if ((s[i-1]>='A' && s[i-1]<='Z') || (s[i-1]>='a' && s[i-1]<='z'))
{
wo[j] = '\0';
j = 0;
for (k=0,flag=0;k<d;k++)
{
if (!strcmp(wo,di[k]))
{
flag = 1;
}
}
if (!flag)
{
strcpy(di[d],wo);
d++;
}
}
}
}
}
asend(di,d);
for (i=0;i<d;i++)
{
printf("%s\n",di[i]);
}
return 0;
}
void asend(char p[][N], int m)
{
int i, j;
char t[N];
for (i=0;i<m;i++)
{
for (j=i+1;j<m;j++)
{
if (strcmp(p[j],p[i])<0)
{
strcpy(t,p[j]);
strcpy(p[j],p[i]);
strcpy(p[i],t);
}
}
}
}