您的位置:首页 > 其它

68.qq号索引结构体写入内存,并实现快速排序

2018-02-13 00:00 113 查看
1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体
2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件
3 #define _CRT_SECURE_NO_WARNINGS
4 #include<stdio.h>
5 #include<stdlib.h>
6
7 char path[256] = "QQ.txt";
8 char indexpath[256] = "QQindex8848.txt";
9 char sortindexpath[256] = "QQsortindex8848.txt";
10
11 #define allN 84331072
12
13 struct INDEX
14 {
15     //QQ号
16     long long QQ;
17     //索引
18     int index;
19 };
20 //简化索引
21 typedef struct INDEX Index;
22
23 //从字符串获取qq号,存放在tmp中,并在tmp中提取QQ号
24 void getQQ(char *str, char *tmp)
25 {
26     strcpy(tmp, str);
27     char *p = tmp;
28     while (*p)
29     {
30         if (*p == '-')
31         {
32             *p = '\0';
33             break;
34         }
35         p++;
36     }
37 }
38
39 //每一行读取到索引
40 void main1()
41 {
42     FILE *pfr = fopen(path, "r");
43     FILE *pfw = fopen(indexpath, "wb");
44
45     while (!feof(pfr))
46     {
47         //获取当前文件指针距离开头的位置,在读取之前读取,读取的是每一行开头的位置
48         int index = ftell(pfr);
49
50         char str[50] = { 0 };
51         //读取
52         fgets(str, 50, pfr);
53         char tmp[50] = { 0 };
54         //获取QQ到tmp
55         getQQ(str, tmp);
56         //把QQ转换成long long类型
57         long long lltmp = atoll(tmp);
58         if (lltmp==0)
59         {
60             continue;
61         }
62         Index in1 = { 0 };
63         in1.QQ = lltmp;
64         in1.index = index;
65         //把索引结构体写入
66         fwrite(&in1, sizeof(in1), 1, pfw);
67     }
68
69     fclose(pfr);
70     fclose(pfw);
71     printf("索引OK");
72     system("pause");
73 }
74
75 //比较两个结构体
76 int com(void *p1, void *p2)
77 {
78     Index *pl1 = p1;
79     Index *pl2 = p2;
80     if (pl1->QQ >pl2->QQ)
81     {
82         return 1;
83     }
84     else if (pl1->QQ <pl2->QQ)
85     {
86         return -1;
87     }
88     else
89     {
90         return 0;
91     }
92
93 }
94
95 //读取到结构体
96 void main()
97 {
98     FILE *pfr = fopen(indexpath, "rb");
99     FILE *pfw = fopen(sortindexpath, "wb");
100     //分配这么多个索引结构体(包括qq号和位置),并读取
101     Index *p = malloc(allN*sizeof(Index));
102     fread(p, sizeof(Index), allN, pfr);
103
104     //对读取的结构体进行排序
105     qsort(p, sizeof(Index), allN,com );
106
107     //写入
108     fwrite(p, sizeof(Index), allN, pfw);
109
110     //关闭文件
111     fclose(pfr);
112     fclose(pfw);
113
114     system("pause");
115 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: