• 86.八千万qq密码按相似度排序并统计密码出现次数,生成密码库


    • 存储qq的文件地址以及按照密码相似度排序的文件地址
      1 //存储qq的文件的地址
      2 char path[512] = "QQ.txt";
      3 //按照密码相似度排序的文件地址
      4 char pathsortbypass[512] = "QQpasswordsort.txt";
    • 标识qq一共有多少行
      1 //文件一共有多少行
      2 #define N  84331446
    • 创建结构体存储密码,并把文件载入内存
      1 //密码信息
      2 struct info
      3 {
      4     char str[17];
      5 };
      6 
      7 //指向所有结构体的指针
      8 struct info *pall = NULL;
       1 //初始化
       2 void init()
       3 {
       4     //记录时间
       5     time_t start, end;
       6     time(&start);
       7 
       8     pall = calloc(N, sizeof(struct info));//分配内存
       9     if (pall==NULL)
      10     {
      11         puts("calloc fail");
      12         return;
      13     }
      14     //打开文件
      15     FILE *pf = fopen(path, "r");
      16     
      17     //依次读取
      18     for (int i = 0; i <N; i++)
      19     {
      20         char str[50] = { 0 };
      21         fgets(str, 50, pf);
      22         char *pfind = strstr(str, "----");
      23         //每行格式123----qweqe
      24         if (pfind !=NULL)
      25         {
      26             int length = strlen(pfind + 4);
      27             //刷掉非法密码
      28             if (length<17)
      29             {
      30                 //拷贝字符串
      31                 strcpy(pall[i].str, pfind + 4);
      32             }
      33         }
      34     }
      35     //关闭文件
      36     fclose(pf);
      37     time(&end);
      38     printf("文件读取话费%f秒
      ", difftime(end, start));
      39 }
    • 按照相似度快速排序
       1 //快速排序比较函数,比较两个结构体
       2 int com(void *p1, void *p2)
       3 {
       4     struct info *pinfo1 = p1;
       5     struct info *pinfo2= p2;
       6     return strcmp(pinfo1->str, pinfo2->str);//排序的函数
       7 }
       8 
       9 //排序
      10 void sort()
      11 {
      12     //记录时间
      13     time_t start, end;
      14     time(&start);
      15 
      16     //快速排序
      17     qsort(pall, N, sizeof(struct info), com);
      18 
      19     time(&end);
      20     printf("排序话费%f秒
      ", difftime(end, start));
      21 }
    • 写入文件
       1 //写入文件
       2 void writetofile()
       3 {
       4     //存储时间
       5     time_t start, end;
       6     //开始时间
       7     time(&start);
       8     //以写的方式打开文件
       9     FILE *pf = fopen(pathsortbypass, "w");
      10     //判断每一个
      11     for (int  i = 0; i < N; i++)
      12     {
      13         //格式 5----pass
      14         char allstr[100] = { 0 };
      15         //存储密码
      16         char istr[100] = { 0 };
      17         strcpy(istr, pall[i].str);//拷贝备份
      18 
      19         int j = 1;//出现一次
      20         //循环直到最后一个不相等
      21         while (strcmp(pall[i].str,pall[i+1].str)==0)
      22         {
      23             i++;//循环前进
      24             j++;//计数
      25         }
      26         //合成字符串写入
      27         sprintf(allstr, "%d----%s", j, istr);
      28         //写入到文件
      29         fputs(allstr, pf);
      30     }
      31 
      32     //关闭文件
      33     fclose(pf);
      34 
      35     //结束
      36     time(&end);
      37 
      38     printf("排序花费%f秒
      ", difftime(end, start));
      39 }
    • 获取文件有多少行
       1 //获取文件有多少行
       2 int getN(char *path)
       3 {
       4     int i = 0;
       5     FILE *pf = fopen(path, "r");
       6     if (pf==NULL)
       7     {
       8         return -1;
       9     }
      10     else
      11     {
      12         while (!feof(pf))
      13         {
      14             char str[50] = { 0 };
      15             fgets(str, 50, pf);
      16             i++;
      17         }
      18         
      19         fclose(pf);
      20         return i;
      21     }
      22 }
    • 主函数
       1 //主函数
       2 void main()
       3 {
       4     //初始化载入到内存
       5     init();
       6     //密码相似度排序
       7     sort();
       8     //写入文件
       9     writetofile();
      10     system("pause");
      11 }

    完整代码

      1 #define  _CRT_SECURE_NO_WARNINGS
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #include<string.h>
      5 #include<time.h>
      6 
      7 //存储qq的文件的地址
      8 char path[512] = "QQ.txt";
      9 //按照密码相似度排序的文件地址
     10 char pathsortbypass[512] = "QQpasswordsort.txt";
     11 //文件一共有多少行
     12 #define N  84331446
     13 
     14 //密码信息
     15 struct info
     16 {
     17     char str[17];
     18 };
     19 
     20 //指向所有结构体的指针
     21 struct info *pall = NULL;
     22 
     23 //写入文件
     24 void writetofile()
     25 {
     26     //存储时间
     27     time_t start, end;
     28     //开始时间
     29     time(&start);
     30     //以写的方式打开文件
     31     FILE *pf = fopen(pathsortbypass, "w");
     32     //判断每一个
     33     for (int  i = 0; i < N; i++)
     34     {
     35         //格式 5----pass
     36         char allstr[100] = { 0 };
     37         //存储密码
     38         char istr[100] = { 0 };
     39         strcpy(istr, pall[i].str);//拷贝备份
     40 
     41         int j = 1;//出现一次
     42         //循环直到最后一个不相等
     43         while (strcmp(pall[i].str,pall[i+1].str)==0)
     44         {
     45             i++;//循环前进
     46             j++;//计数
     47         }
     48         //合成字符串写入
     49         sprintf(allstr, "%d----%s", j, istr);
     50         //写入到文件
     51         fputs(allstr, pf);
     52     }
     53 
     54     //关闭文件
     55     fclose(pf);
     56 
     57     //结束
     58     time(&end);
     59 
     60     printf("排序花费%f秒
    ", difftime(end, start));
     61 }
     62 
     63 
     64 //快速排序比较函数,比较两个结构体
     65 int com(void *p1, void *p2)
     66 {
     67     struct info *pinfo1 = p1;
     68     struct info *pinfo2= p2;
     69     return strcmp(pinfo1->str, pinfo2->str);//排序的函数
     70 }
     71 
     72 //排序
     73 void sort()
     74 {
     75     //记录时间
     76     time_t start, end;
     77     time(&start);
     78 
     79     //快速排序
     80     qsort(pall, N, sizeof(struct info), com);
     81 
     82     time(&end);
     83     printf("排序话费%f秒
    ", difftime(end, start));
     84 }
     85 
     86 //初始化
     87 void init()
     88 {
     89     //记录时间
     90     time_t start, end;
     91     time(&start);
     92 
     93     pall = calloc(N, sizeof(struct info));//分配内存
     94     if (pall==NULL)
     95     {
     96         puts("calloc fail");
     97         return;
     98     }
     99     //打开文件
    100     FILE *pf = fopen(path, "r");
    101     
    102     //依次读取
    103     for (int i = 0; i <N; i++)
    104     {
    105         char str[50] = { 0 };
    106         fgets(str, 50, pf);
    107         char *pfind = strstr(str, "----");
    108         //每行格式123----qweqe
    109         if (pfind !=NULL)
    110         {
    111             int length = strlen(pfind + 4);
    112             //刷掉非法密码
    113             if (length<17)
    114             {
    115                 //拷贝字符串
    116                 strcpy(pall[i].str, pfind + 4);
    117             }
    118         }
    119     }
    120     //关闭文件
    121     fclose(pf);
    122     time(&end);
    123     printf("文件读取话费%f秒
    ", difftime(end, start));
    124 }
    125 
    126 
    127 //获取文件有多少行
    128 int getN(char *path)
    129 {
    130     int i = 0;
    131     FILE *pf = fopen(path, "r");
    132     if (pf==NULL)
    133     {
    134         return -1;
    135     }
    136     else
    137     {
    138         while (!feof(pf))
    139         {
    140             char str[50] = { 0 };
    141             fgets(str, 50, pf);
    142             i++;
    143         }
    144         
    145         fclose(pf);
    146         return i;
    147     }
    148 }
    149 
    150 
    151 //主函数
    152 void main()
    153 {
    154     //初始化载入到内存
    155     init();
    156     //密码相似度排序
    157     sort();
    158     //写入文件
    159     writetofile();
    160     system("pause");
    161 }
  • 相关阅读:
    Python进阶06 循环对象
    Python进阶05 循环设计
    Python进阶 函数的参数对应
    Python进阶01 词典
    Python基础 反过头来看看
    Python基础08 面向对象的基本概念
    利用zepto.js实现移动页面图片全屏滑动
    数组弃重方法
    fcc筆記
    文字颜色渐变效果
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8458245.html
Copyright © 2020-2023  润新知