49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序相关的知识,希望对你有一定的参考价值。

原数据: 

处理后的数据:

完整代码:

  1 //思路;
  2 //数据清洗(把空格替换成\'\\0\') -> 精确获取每一行(要提前获取source的总长度) -> 获取出每一行再精确分割并把分割后的数据赋给结构体
  3 
  4 #define _CRT_SECURE_NO_WARNINGS
  5 #include <iostream>
  6 #include <stdlib.h>
  7 #include <string.h>
  8 
  9 //要被挖掘的数据
 10 char str[1024] = "569603080----zj123456789 \\
 11 94940443----zj123456789 \\
 12 260024036----zj1456789 \\
 13 707611428----zj123456789 \\
 14 793516568----zj123456789 \\
 15 280105138----zj1256789 \\
 16 853339297----zj145678 \\
 17 791088021----zj1234789 \\
 18 461913547----zj12366456789 \\
 19 739195069----zj12389 \\
 20 595061094----zj123789 \\
 21 835928755----zj123456789 \\
 22 824218951----zj123456789 \\
 23 824219738----zj123456789 \\
 24 824220392----zj16789 \\
 25 793708834----zj123456789 \\
 26 462942630----zj1789 \\
 27 779446648----zj1256789 \\
 28 807517937----zj123456789 \\
 29 785332401----zj123456789 \\
 30 824637233----zj123456789 \\
 31 824637654----zj126789 \\
 32 824642464----zj123456789 \\
 33 657004476----zj123456789 \\
 34 550261273----zj16789 \\
 35 771451402----zj123456789 \\
 36 478838706----zj123456789 \\
 37 837569545----zj12345789 \\
 38 838778566----zj12789 \\
 39 838466198----zj126789 \\
 40 807522015----zj1236789 \\
 41 823194447----zj12789 \\
 42 295936400----zj123456789 \\
 43 838041792----zj1239 \\
 44 838042137----zj123456789 \\
 45 838042825----zj1289 ";
 46 
 47 //求出数据长度
 48 int totalLength;
 49 
 50 //获取有多少行数据
 51 int getlength(char *src)
 52 {
 53     int num = 0;
 54     char *pstart = strstr(src, "----");
 55 
 56     while (pstart != NULL)
 57     {
 58         num++;
 59         pstart = strstr(pstart+4, "----");
 60     }
 61     return num;
 62 }
 63 
 64 //QQ号结构体
 65 struct QQ
 66 {
 67     long long qqNum;
 68     char *mima;
 69 };
 70 
 71 //匿名结构体存储所有QQ
 72 struct
 73 {
 74     struct QQ *data;
 75     int length;
 76 }MyData;
 77 
 78 //数据清洗,把空格替换成‘\\0’
 79 void wash(char *src)
 80 {
 81     while (*src != \'\\0\')
 82     {
 83         if (*src == \' \')
 84         {
 85             *src = \'\\0\';
 86         }
 87         src++;
 88     }
 89 }
 90 
 91 //初始化结构体
 92 void init()
 93 {
 94     //给匿名结构体分配内存
 95     MyData.data = (struct QQ *)calloc(MyData.length, sizeof(struct QQ));
 96 
 97     //MyData.data的下标
 98     int id = 0;
 99     //把清洗后的数据从第一位遍历到最后一位
100     for (char *pstart = str; pstart < str + totalLength; pstart += strlen(pstart)+1)
101     {
102         //以“-----”寻找,返回寻找到的首地址
103         char *pwei = strstr(pstart,"----");
104         //密码所在位置的首地址
105         pwei += 4;
106         //获取密码长度
107         int len = strlen(pwei);
108         //精确分配内存
109         MyData.data[id].mima = (char *)calloc(len+1, sizeof(char));
110 
111         //以此方法精确拷贝
112         //sscanf(pstart, "%lld----%s", &MyData.data[id].qqNum,MyData.data[id].mima);
113         //或者以这种方式copy数据
114         sscanf(pstart, "%lld",&MyData.data[id].qqNum);
115         strcpy(MyData.data[id].mima, pwei);
116         //printf("%lld,%s\\n", MyData.data[id].qqNum,MyData.data[id].mima);
117         id++;
118     }
119     
120 }
121 
122 void show()
123 {
124     for (int i = 0; i < MyData.length; i++)
125     {
126         printf("qq号:%lld", MyData.data[i].qqNum);
127         printf("     密码:%s", MyData.data[i].mima);
128         printf("\\n");
129     }
130 }
131 
132 //比较函数
133 int cmp(const void *p1, const void *p2)
134 {
135     //类型转换,把void类型转化成(QQ *),这个类型和qsort传入的首地址类型有关
136     QQ *ptemp1 = (QQ *)p1;
137     QQ *ptemp2 = (QQ *)p2;
138     //大于返回1,等于返回0,小于返回-1
139     if (ptemp1->qqNum > ptemp2->qqNum)
140     {
141         return 1;
142     }
143     else if (ptemp1->qqNum < ptemp2->qqNum)
144     {
145         return -1;
146     }
147     else
148     {
149         return 0;
150     }
151 }
152 
153 void main()
154 {
155     printf("%s\\n\\n", str);
156 
157     //获取数据长度
158     MyData.length = getlength(str);
159     //获取有多少行数据
160     totalLength = strlen(str);
161     //数据清洗
162     wash(str);
163     //初始化
164     init();
165     //调用快速排序
166     qsort(MyData.data, MyData.length, sizeof(MyData.data[0]), cmp);
167     show();
168     system("pause");
169 }

 

以上是关于49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序的主要内容,如果未能解决你的问题,请参考以下文章

5-15 QQ帐户的申请与登陆 (25分)

11-散列3 QQ帐户的申请与登陆 (25 分)

QQ自动营销怎么样?流量星球:QQ营销机器人深度挖掘精准粉丝!

QQ帐户的申请与登陆 (25分)

数据挖掘之性别训练

7-15 QQ帐户的申请与登陆