zrq495
www.zrq495.com

第一次RE,数组定义的太小了,题目说是5000个单词,如果加上重复的就不够了。

第二次TLE,我用的是选择排序,应该用快排。

 

快排函数:

用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));    

参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序   

qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )    

其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。    

比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。    

qsort(a,1000,sizeof(int ),comp);    

其中comp函数应写为:    

int comp(const void *a,const void *b)    

{    

  return *(int *)a-*(int *)b;    

}    

上面是由小到大排序,return *(int *)b-*(int *)a; 为由大到小排序。

 

 

AC代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char sin[100010][205]={{0},{0}}, sout[100010][205]={{0},{0}}, str[205];
 5 
 6 void strlwer(char str[])
 7 {
 8     int i;
 9     for (i=0; str[i] != '\0'; i++)
10         if (str[i] >= 'A' && str[i] <= 'Z')
11             str[i]+=32;
12 }
13 
14 int cmp(const void* _a,const void* _b)
15 {
16     char* a= (char*)_a;
17     char* b= (char*)_b;
18     return strcmp(a,b);
19 
20 }
21 
22 int main()
23 {
24     int i, j, k, l;
25     l=0;
26     for (k=0; gets(sin[k]); k++)
27     {
28         strlwer(sin[k]);
29         for (i=0; i<strlen(sin[k]); i++)
30         {
31             if (sin[k][i] >= 'a' && sin[k][i] <='z')
32             {
33                 for (j=i; ; j++)
34                 {
35                     if (sin[k][j] >= 'a' && sin[k][j] <= 'z')
36                     {
37                         sout[l][j-i]=sin[k][j];
38                     }
39                     else
40                     {
41                         sout[l][j-i]='\0';
42                         l++;
43                         i=j;
44                         break;
45                     }
46                 }
47             }
48         }
49     }
50     qsort(sout, l, sizeof(sout[0]), cmp);
51     for (i=0; i<l; i++)
52     {
53         if (strcmp(sout[i], sout[i+1])!=0)
54             puts(sout[i]);
55     }
56     return 0;
57 }
posted on 2012-05-31 20:47  zrq495  阅读(216)  评论(0编辑  收藏  举报