zoukankan      html  css  js  c++  java
  • 49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序

    原数据: 

    处理后的数据:

    完整代码:

      1 //思路;
      2 //数据清洗(把空格替换成'') -> 精确获取每一行(要提前获取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 //数据清洗,把空格替换成‘’
     79 void wash(char *src)
     80 {
     81     while (*src != '')
     82     {
     83         if (*src == ' ')
     84         {
     85             *src = '';
     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
    ", 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("
    ");
    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
    
    ", 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 }
  • 相关阅读:
    Treat wchar_t as built-in type不一致导致的链接错误
    C++ const关键字总结
    安全学习资料网站(持续更新欢迎补充)
    移动端https抓包那些事--进阶篇
    移动端https抓包那些事--初级篇
    drozer工具的安装与使用:之二使用篇
    drozer工具的安装与使用:之一安装篇
    信息安全学习笔记--CSRF
    信息安全学习笔记--XSS
    // 日期操作 封装一些日期常用操作
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8371771.html
Copyright © 2011-2022 走看看