原数据:

处理后的数据:

完整代码:

 //思路;
//数据清洗(把空格替换成'\0') -> 精确获取每一行(要提前获取source的总长度) -> 获取出每一行再精确分割并把分割后的数据赋给结构体 #define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <string.h> //要被挖掘的数据
char str[] = "569603080----zj123456789 \
----zj123456789 \
----zj1456789 \
----zj123456789 \
----zj123456789 \
----zj1256789 \
----zj145678 \
----zj1234789 \
----zj12366456789 \
----zj12389 \
----zj123789 \
----zj123456789 \
----zj123456789 \
----zj123456789 \
----zj16789 \
----zj123456789 \
----zj1789 \
----zj1256789 \
----zj123456789 \
----zj123456789 \
----zj123456789 \
----zj126789 \
----zj123456789 \
----zj123456789 \
----zj16789 \
----zj123456789 \
----zj123456789 \
----zj12345789 \
----zj12789 \
----zj126789 \
----zj1236789 \
----zj12789 \
----zj123456789 \
----zj1239 \
----zj123456789 \
----zj1289 "; //求出数据长度
int totalLength; //获取有多少行数据
int getlength(char *src)
{
int num = ;
char *pstart = strstr(src, "----"); while (pstart != NULL)
{
num++;
pstart = strstr(pstart+, "----");
}
return num;
} //QQ号结构体
struct QQ
{
long long qqNum;
char *mima;
}; //匿名结构体存储所有QQ
struct
{
struct QQ *data;
int length;
}MyData; //数据清洗,把空格替换成‘\0’
void wash(char *src)
{
while (*src != '\0')
{
if (*src == ' ')
{
*src = '\0';
}
src++;
}
} //初始化结构体
void init()
{
//给匿名结构体分配内存
MyData.data = (struct QQ *)calloc(MyData.length, sizeof(struct QQ)); //MyData.data的下标
int id = ;
//把清洗后的数据从第一位遍历到最后一位
for (char *pstart = str; pstart < str + totalLength; pstart += strlen(pstart)+)
{
//以“-----”寻找,返回寻找到的首地址
char *pwei = strstr(pstart,"----");
//密码所在位置的首地址
pwei += ;
//获取密码长度
int len = strlen(pwei);
//精确分配内存
MyData.data[id].mima = (char *)calloc(len+, sizeof(char)); //以此方法精确拷贝
//sscanf(pstart, "%lld----%s", &MyData.data[id].qqNum,MyData.data[id].mima);
//或者以这种方式copy数据
sscanf(pstart, "%lld",&MyData.data[id].qqNum);
strcpy(MyData.data[id].mima, pwei);
//printf("%lld,%s\n", MyData.data[id].qqNum,MyData.data[id].mima);
id++;
} } void show()
{
for (int i = ; i < MyData.length; i++)
{
printf("qq号:%lld", MyData.data[i].qqNum);
printf(" 密码:%s", MyData.data[i].mima);
printf("\n");
}
} //比较函数
int cmp(const void *p1, const void *p2)
{
//类型转换,把void类型转化成(QQ *),这个类型和qsort传入的首地址类型有关
QQ *ptemp1 = (QQ *)p1;
QQ *ptemp2 = (QQ *)p2;
//大于返回1,等于返回0,小于返回-1
if (ptemp1->qqNum > ptemp2->qqNum)
{
return ;
}
else if (ptemp1->qqNum < ptemp2->qqNum)
{
return -;
}
else
{
return ;
}
} void main()
{
printf("%s\n\n", str); //获取数据长度
MyData.length = getlength(str);
//获取有多少行数据
totalLength = strlen(str);
//数据清洗
wash(str);
//初始化
init();
//调用快速排序
qsort(MyData.data, MyData.length, sizeof(MyData.data[]), cmp);
show();
system("pause");
}

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

  1. 啊哈算法之巧用队列解密QQ号

    简述 本算法摘选自啊哈磊所著的<啊哈!算法>第二章第一节的题目——使用队列来解密举例中按照规则加密的QQ号.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,意在深 ...

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

    //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件 #define _CR ...

  3. 今天竟然有人模仿我的QQ号进行骗钱

    今天下午,CoderGeek同学告诉我,有个叫"小雷FansUnion"的QQ正在找他要钱,他直接和我这个正宗的"小雷FansUnion"探听虚实.这时才发现, ...

  4. C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)

    原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号.密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选 ...

  5. (转)最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等

    什么是 RegExp? RegExp 是正则表达式(Regular expression)的缩写,作用是对字符串执行模式匹配. 通常用于格式验证.正则替换.查找子串等 各种编程语言的正则表达式基本相同 ...

  6. 【转】如何保护自己的QQ号

    账号丢失的原因 账号被注销 长时间未登陆 如果你的QQ号是普通号码,在连续三个月不登陆的情况下,腾讯公司会自动收回你的账号,也就意味着这个QQ号码从此再也不属于你了,会员号码是不会被收回的,要想不被收 ...

  7. web安全:QQ号快速登录漏洞及被盗原理

    为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗.本文将讲解一个QQ的快速登录的漏洞. 我前阵子在论坛上看到一个QQ的快速登录的漏洞,觉得非常不错,所以把部分原文给转到园子来 ...

  8. [转帖]web安全:QQ号快速登录漏洞及被盗原理

    web安全:QQ号快速登录漏洞及被盗原理 https://www.cnblogs.com/1996V/p/7481823.html 看了下 QQ的确监听 端口 大神牛B 自己这一块一直没深入学习过.. ...

  9. QQ号快速登录漏洞及被盗原理

    web安全:QQ号快速登录漏洞及被盗原理   为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗.本文将讲解一个QQ的快速登录的漏洞. 我前阵子在论坛上看到一个QQ的快速登录的 ...

随机推荐

  1. html页面全屏化显示

    <html><head><script>// toggle full screen function toggleFullScreen() { if (!docum ...

  2. 一些标签库的学习和do的讨论

    JSTL 核心标签库http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html .do的讨论http://bbs.csdn.net/t ...

  3. realm怎样支持hashmap

    realm不支持hashmap这种形式stackoverflow给出了解决方案http://stackoverflow.com/ques... class MyData extends RealmOb ...

  4. 前端之CSS介绍

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS的语法 CSS语 ...

  5. Linux中常用命令(文件)

    1.cat 显示出文件的全部内容 (1)格式:cat 文件名 -n 显示行号 (2)特点:一次性显示所有文件内容 2.tac 从最后一行倒着显示文件全部内容 3.more 全屏方式分页显示文件内容 回 ...

  6. Redis-Sentinel原理及配置详解【转】

    https://www.cnblogs.com/zhoujinyi/p/5570024.html

  7. fuser ---显示出当前程序使用磁盘上的某个文件

    fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser只把PID输出到标准输出,其他的都输出到标准错误输出. a 显示所有命令行中指定的 ...

  8. Jupyter Notebook 常用的快捷键

    Jupyter Notebook 有两种键盘输入模式.编辑模式,允许你往单元中键入代码或文本:这时的单元框线是绿色的.命令模式,键盘输入运行程序命令:这时的单元框线是灰色. Shift+Enter : ...

  9. ArcGIS api for javascript——图层-创建WMS图层类型的图层

    本例使用一个WMS端点创建了一个简单的动态图层.首先,代码声明一个新的类my.CityStatesRiversUSAWMSLayer,该类继承esri.layers.DynamicMapService ...

  10. NYOJ 541 最强的战斗力

    最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描写叙述 春秋战国时期,赵国地大物博,资源很丰富.人民安居乐业.但很多国家对它虎视眈眈.准备联合起来对赵国发起一 ...