72.挖掘CSDN密码到链表并统计密码出现次数生成密码库
- list.h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //创建密码结点
typedef struct passinfo
{
//密码
char password[];
//出现次数
int ci;
//下一个节点
struct passinfo *pNext;
}INFO, *PINFO; //头部插入
PINFO addback(PINFO phead, char password[]);
//按照次数排序
PINFO sortbyci(PINFO phead);
//按照密码排序
PINFO sortbypass(PINFO phead);
//显示数据
PINFO show(PINFO phead);
//判断存在与否
int isin(PINFO phead, char password[]);
//写入到文件
void writetofile(PINFO phead, char path[]); - list.c
#include "list.h" //头部插入
PINFO addback(PINFO phead, char password[])
{
//开辟内存
PINFO pnew = calloc(, sizeof(INFO));
//拷贝密码
strcpy(pnew->password, password);
//初始化
pnew->ci = ;
pnew->pNext = NULL;
//如果头结点为空直接插入
if (phead ==NULL)
{
phead = pnew;
}
//否则头部插入
else
{
pnew->pNext = phead;
phead = pnew;
}
return phead;
} //按照密码次数排序
PINFO sortbyci(PINFO phead)
{
//冒泡排序法,一共冒泡这么多次
for (PINFO p1 = phead; p1 != NULL;p1=p1->pNext)
{
for (PINFO p2 = phead; p2 != NULL; p2 = p2->pNext)
{
if (p2->pNext!=NULL)
{
//如果次数小则进行交换
if (p2->ci < p2->pNext->ci)
{
//交换数据
int citemp = p2->ci;
p2->ci = p2->pNext->ci;
p2->pNext->ci = citemp; char passtemp[];
strcpy(passtemp, p2->password);
strcpy(p2->password, p2->pNext->password);
strcpy(p2->pNext->password, passtemp);
}
}
}
}
} //按照密码排序
PINFO sortbypass(PINFO phead)
{
//冒泡排序
for (PINFO p1 = phead; p1 != NULL; p1 = p1->pNext)
{
for (PINFO p2 = phead; p2 != NULL; p2 = p2->pNext)
{
if (p2->pNext != NULL)
{
if (strcmp(p2->password, p2->pNext->password) < )
{
//交换数据
int citemp = p2->ci;
p2->ci = p2->pNext->ci;
p2->pNext->ci = citemp; char passtemp[];
strcpy(passtemp, p2->password);
strcpy(p2->password, p2->pNext->password);
strcpy(p2->pNext->password, passtemp); }
}
}
}
} //显示数据
PINFO show(PINFO phead)
{
if (phead==NULL)
{
return;
}
else
{
printf("%s,%d\n", phead->password, phead->ci);
show(phead->pNext);
}
return phead;
} //判断密码是否存在
int isin(PINFO phead, char password[])
{
PINFO p = phead;
while (p!=NULL)
{
if (strcmp(p->password,password)==)
{
p->ci += ;
return ;
}
p = p->pNext;
} return ;//不在链表内部
} //写入到文件
void writetofile(PINFO phead, char path[])
{
FILE *pf = fopen(path, "w");
PINFO p = phead;
while (p != NULL)
{
//格式化打印到文件
fprintf(pf, "%s %d\n", p->password, p->ci);
p = p->pNext;
}
fclose(pf);
} - main.c
#include "list.h"
#include <Windows.h>
PINFO phead = NULL; //是否满足格式要求 账号 # 密码 # 邮箱
int isoktosscanf(char *str)
{
//判断是否存在#
char *p = strstr(str, "#");
if (p!=NULL)
{
//继续判断是否存在第二个#
if (strstr(p+,"#")!=NULL)
{
return ;
}
else
{
return ;
}
}
else
{
return ;
}
} //消除空格
void eatspace(char *str)
{
//当前位置
int i = ;
//游标
int j = ;
//双指针错位
while ((str[i]=str[j++])!='\0')
{
if (str[i]!=' ')
{
i++;
}
}
} //文件载入
void fileload()
{
//打开文件
FILE *pf = fopen("csdn.txt", "r"); //如果没有到文件末尾
while (!feof(pf))
{
char str[] = { };
char password[] = { };
//从文件中获取一行
fgets(str, , pf);
//找到第一个#的位置
char*p1 = strstr(str, "#");
//找到第二个#的位置
char*p2 = strstr(p1+, "#");
//分别设置成'\0'
*p1 = '\0';
*p2 = '\0';
//拷贝字符串
strcpy(password, p1 + );
//消除空格
eatspace(password);
//判断是否在链表中
if (isin(phead, password) == )
{
//添加到头结点
phead = addback(phead, password);
}
}
fclose(pf); //按密码次数排序
sortbyci(phead);
//写入到文件
writetofile(phead, "C:\\ci.txt");
//按照密码相似度排序
sortbypass(phead);
//写入到文件
writetofile(phead, "C:\\pass.txt");
} //main函数
void main4()
{
fileload();
system("pause");
}
72.挖掘CSDN密码到链表并统计密码出现次数生成密码库的更多相关文章
- 86.八千万qq密码按相似度排序并统计密码出现次数,生成密码库
存储qq的文件地址以及按照密码相似度排序的文件地址 //存储qq的文件的地址 ] = "QQ.txt"; //按照密码相似度排序的文件地址 ] = "QQpassword ...
- 如何破解密码的哈希值,破解双MD5密码值
这是关于我如何破解密码的哈希值1亿2200万* John the Ripper和oclHashcat-plus故事. 这是几个月前,当我看到一条推特:从korelogic约含共1亿4600万个密码的密 ...
- 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5395715.html 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一 ...
- python统计元素重复次数
python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...
- 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?
利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查看Chrome浏览器上保存的密码时,点击显示,会弹出一个对话框 ...
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
- Linux下随机生成密码的命令总结
有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下 ...
- hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...
- python之pygal:掷两个不同的骰子并统计大小出现次数
代码示例: # 掷两个不同的骰子并统计大小出现次数 import pygal from die_class import Die die = Die(6) # 实例化一个六面的骰子对象 die_10 ...
随机推荐
- 国庆 day 6 下午
1.数组异或 (xorarray.pas/c/cpp) (xorarray.in/out) 时间限制:2s/空间限制:256M [题目描述] xor——异或,和 and 与or 一样,是一种重要的逻辑 ...
- 设置UITableViewCell高度的问题
有非常多时候.UITableViewCell每行的高度是不固定的,须要动态设置. UITableView有个代理方法, -(CGFloat)tableView:(UITableView *)table ...
- java枚举在android项目应用
今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了.然后修复了整整两天.然后我又一次整理了一遍,重构就算不上了. 然后就用上了枚举. 什么是 ...
- 记一次httpclient Connection reset问题定位
问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象. 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来. 1.根据线上问题相关日志判断应该是有部 ...
- 5.应用与模块(ng-app)
转自:https://www.cnblogs.com/best/tag/Angular/ 自动载入启动一个AngularJS应用,声明了ng-app的元素会成为$rootScope的起点 每个HTML ...
- tomcat加载web.xml
这几天看tomcat的源码,疑问很多,比如之一“ tomcat 怎么加载 web.xml”,下面是跟踪的过程,其中事件监听器有一个观察者模式,比较好.记录下来以供参考 >>>> ...
- windows 手动添加服务
windows 手动添加服务方法一:修改注册表 在注册表编辑器,展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ...
- HDU 4431 Mahjong 模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4431 不能说是水题了,具体实现还是很恶心的...几乎优化到哭但是DFS(还加了几个剪枝)还是不行...搜索一直T ...
- BZOJ2636: crisis(可持久化线段树)
传送门: 解题思路: 题目描述是一大坑点,cancel后面是直接加ask或者redo的. 那么就可以愉快地可持久化了. 注意需要支持区间修改,那么就只需要在再次更新这个点的时候将标记储存在新的儿子中. ...
- 【Linux下安装使用virtualenv与virtualenvwrapper】
virtualenv virtualenv是一个可以帮助我们管理不同Python环境的绝好工具. virtualenv是一个可以在系统中建立多个不同且相互不干扰的虚拟环境. 下面的步骤将创建两个独立的 ...