水题一道,但仍然不甚了解,若有知情的大神,希望提点一二,不胜感激
本题是要将输入的一些英文按字典顺序排列,于是可用qsort来完成,下面是ac的代码:
#include<stdlib.h>
char alp[1000000][50];
char scan[1000000][50];
int cmp(const void *a, const void *b)
{
return strcmp((char *)a,(char *)b);
}
int main()
{
int m = 0,n = -1,ok = 0;
char ch;
while((ch = getchar()) != EOF)
{
if(isalpha(ch))
{
alp[m][++n] = tolower(ch);
ok = 1;
}
else if(ok)
{
m++;
n = -1;
ok = 0;
}
}
qsort(alp,m,sizeof(alp[0]),cmp);
if(strcmp(alp[0],"")) printf("%s",alp[0]);
for(int i = 1; i < m; i++)
if(strcmp(alp[i],alp[i-1]) && strcmp(alp[i],"")) printf("%s",alp[i]);
return 0;
}
但我不明白,使用scanf来读入字符串竟一直不过,代码如下:
#include<stdlib.h>
char alp[1000000][50];
char scan[1000000][50];
int cmp(const void *a, const void *b)
{
return strcmp((char *)a,(char *)b);
}
int main()
{
int m = 0,n = -1,ok = 0;
while(scanf("%s",scan[++m]) != EOF)
{
for(n = 0;n <= strlen(scan[m]); n++)
if(isalpha(scan[m][n])) alp[m][n] = tolower(scan[m][n]);
alp[m][n] = '\0';
}
qsort(alp,m,sizeof(alp[0]),cmp);
if(strcmp(alp[0],"")) printf("%s",alp[0]);
for(int i = 1; i < m; i++)
if(strcmp(alp[i],alp[i-1]) && strcmp(alp[i],"")) printf("%s",alp[i]);
return 0;
}