65.十一级指针实现百万qq号的增删查改以及排序写入
运行结果:

内存使用情况:

写入文件排序好的数据:

- 创建文件地址以及创建十一级指针
char *path = "QQ.txt";
char *sortpath = "QQchiguowei2018.txt";
//创建十一级指针
char *********** allP = NULL; - 初始化十一级指针
//初始化
void init()
{ FILE *pf = fopen(path, "r");
if (pf==NULL)
{ printf("文件打开失败");
return;
}
else
{
//读取每一行加载到allP中
for (int i = ; i < allN; i++)
{
char str[] = { };
fgets(str, , pf);//读取
char *tmpstr = convertQQ(str);//获取QQ号 if (isallnum(tmpstr))
{
assignmem(&allP, , tmpstr);//分配内存 strcpy(allP[getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])][getnum(tmpstr[])], str); }
}
}
fclose(pf);
} - 字符串转提取qq号的函数
//字符串提取qq号
char *convertQQ(char *str)
{
int length = strlen(str);//获取长度
char *tmp = malloc(length + );
strcpy(tmp, str);//拷贝,避免数据自动回收
//获取第一个'-'的位置
char *p = strchr(tmp, '-');
if (p!=NULL)
{
*p = '\0'; }
int count = strlen(tmp);//获取QQ长度
//如果长度小于10,则在前面置零,转换成十位,最后一位/0也写入,所以要从下标10开始,一共11位
if (count< )
{
for (int i = ; i >= ; i--, count--)
{
if (count>=)//移动
{
tmp[i] = tmp[count];
}
else
{
//填充0
tmp[i] = '';
}
}
}
return tmp;
} - 判断是不是全是数字
//判断是不是全是数字
int isallnum(char *str)//判断是否有非法字符
{
while (*str)
{
if (*str<'' || *str>'')
{
return ;
} str++;
}
return ; } - 获取对应数字
//获取对应的数字
int getnum(char ch)
{
return ch - '';//0 1
} - 分配内存 深度表示前面还有几颗星 如果还有一颗星则进行内存分配,刚开始前面有十一颗星
//分配内存 深度表示前面还有几颗星 如果还有一颗星则进行内存分配,刚开始前面有十一颗星
void assignmem(char **pp,int deep,char *str)
{
//如果前面有一颗星
if (deep==)
{
//分配内存 获取qq号最后一位的数字
pp[ getnum(*(str + - deep))] = malloc(sizeof(char) * );
//内存清零
memset(pp[getnum(*(str + - deep))], , sizeof(char) * );
return;
} //如果前边有十一颗星
if (deep==)
{
if (allP)
{
assignmem(*pp, deep - , str);//递归调用
return;
}
else
{
//allP指向十个十级指针
allP = malloc(sizeof(char**********) * );//分配指针数组
memset(allP, '\0', sizeof(char*) * );//清零
assignmem(*pp, deep - , str);//递归调用
return;
}
} //如果已经分配内存
if (pp[getnum(*(str + - deep))])
{
//递归调用
assignmem(pp[getnum(*(str + - deep))], deep - , str);
}
//否则分配内存
else
{
pp[getnum(*(str + - deep))] = malloc(sizeof(char*) * );
memset(pp[getnum(*(str + - deep))], , sizeof(char*) * );
assignmem(pp[getnum(*(str + - deep))], deep - , str);//递归调用
}
} - 查询
//查询
void search(char *str)
{
//判断是不是数字
if (isallnum(str)==)
{
return;
}
//如果查询的长度大于10
if (strlen(str)>)
{
return;
} //格式化成10位
char *tmp = malloc();
int count = strlen(str);
if (count<=)
{
for (int i = ; i>=; i--,count--)
{
if (count>=)
{
tmp[i] = str[count];
}
else
{
tmp[i] = '';
}
}
}
else
{
printf("NO NO");
return;
} //依次判断内存是否存在
if (allP[getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ printf("%s\n", allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])]);
return; } } } } } } } } } } printf("没有找到"); } - 删除
//删除某个数据
void deleteit(char *str)
{
if (isallnum(str) == )
{
return;
}
if (strlen(str)>)
{
return; }
char *tmp = malloc();
int count = strlen(str);
if (count <= )//
{
for (int i = ; i >= ; i--, count--)
{
if (count >= )
{
tmp[i] = str[count];
}
else
{
tmp[i] = '';
} } }
else
{
printf("NO NO");
return;
}
//
if (allP[getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
free(allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])]); allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])] = NULL;
return; } } } } } } } } } } printf("没有找到"); } - 增加
//插入某个数据
void insert(char *str, char *pass)
{ if (isallnum(str) == )
{
return;
}
if (strlen(str)>)
{
return; }
char *tmp = malloc();
int count = strlen(str);
if (count <= )//
{
for (int i = ; i >= ; i--, count--)
{
if (count >= )
{
tmp[i] = str[count];
}
else
{
tmp[i] = '';
} } }
else
{
printf("NO NO");
return;
}
//
if (allP[getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
printf("%s\n", allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])]);
printf("已经存在");
return;
}
else
{
int length = strlen(pass);
allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])] = calloc(length + , );
strcpy(allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])], pass); return;
} } } } } } } } } } printf("没有找到"); } - 修改
//改变某个数据
void changeit(char *str, char *newpass)
{ if (isallnum(str) == )
{
return;
}
if (strlen(str)>)
{
return; }
char *tmp = malloc();
int count = strlen(str);
if (count <= )//
{
for (int i = ; i >= ; i--, count--)
{
if (count >= )
{
tmp[i] = str[count];
}
else
{
tmp[i] = '';
} } }
else
{
printf("NO NO");
return;
}
//
if (allP[getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{
if (allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])])
{ printf("已经存在");
free(allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])]);
int length = strlen(newpass);
allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])] = calloc(length + , );
strcpy(allP[getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])][getnum(tmp[])], newpass); return;
} } } } } } } } } }
printf("没有找到");
} - 顺序写入文件
//递归写入到文件
void memtofile(char **p, int deep, FILE *pf)
{
if (p == NULL)
{
return;
}
//如果深度为1(前面还有一颗星)写入
if (deep==)
{
for (int i = ; i <; i++)
{
if (p[i] != NULL)
{
fputs(p[i], pf);//写入
}
} return;
} for (int i = ; i <; i++)
{
memtofile(p[i], deep - , pf);//递归写入
}
} //按qq号顺序写入
void sorttofile()
{
FILE *pf = fopen(sortpath, "w");
memtofile(allP, , pf);//写入
fclose(pf);
} - 测试
init();
printf("init over sorttofile start");
sorttofile();
printf("\n sorttofile end");
while ()
{
int num;
scanf("%d", &num);
switch (num)
{
case :
{
char str[] = { };
printf("请输入要查找的QQ", str);
scanf("%s", str);
search(str);
puts("search over");
break;
}
case :
{
char str[] = { };
printf("请输入要删除的QQ", str);
scanf("%s", str);
deleteit(str);
puts("delete over");
break;
}
case :
{
char str[] = { };
printf("请输入要插入的QQ", str);
scanf("%s", str); char str1[] = { };
printf("请输入要插入的QQpass", str1);
scanf("%s", str1); insert(str, str1);
puts("insert over");
break;
}
case :
{
char str[] = { };
printf("请输入要change的QQ", str);
scanf("%s", str); char str1[] = { };
printf("请输入要change的QQpass", str1);
scanf("%s", str1); changeit(str, str1);
puts("change over");
break;
} default:
break;
} }
65.十一级指针实现百万qq号的增删查改以及排序写入的更多相关文章
- javascript入门 之 zTree(十四 增删查改)(二)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...
- javascript入门 之 zTree(十四 增删查改)(一)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeEditName / beforeRe ...
- C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)
原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号.密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选 ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...
- 【转】如何保护自己的QQ号
账号丢失的原因 账号被注销 长时间未登陆 如果你的QQ号是普通号码,在连续三个月不登陆的情况下,腾讯公司会自动收回你的账号,也就意味着这个QQ号码从此再也不属于你了,会员号码是不会被收回的,要想不被收 ...
- C语言复习:字符串和一级指针
字符串基本操作 字符数组初始化方法 int main() { //1 {}号法 初始化列表 //数组初始化有2种方法 默认元素个数.指定元素个数 char buf1[] = { ...
- (转)最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
什么是 RegExp? RegExp 是正则表达式(Regular expression)的缩写,作用是对字符串执行模式匹配. 通常用于格式验证.正则替换.查找子串等 各种编程语言的正则表达式基本相同 ...
- STL容器及算法题:删除奇数的QQ号
最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...
- php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。
有可能有些输入,不希望让用户的评论或者私信中含有类似于QQ号,手机号的文本,比如交友网站.还有些恶意SEO通过,构造恶意检索词,检索词中包含QQ,手机号等,让百度爬取到,增加展现.也需要将这些检索词屏 ...
随机推荐
- LocalDateTime在spring boot中的格式化配置
在项目中日期格式化是最常见的问题,之前涉及的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,非线程安全,对日期的计算方式繁琐,而且容易出错,因为月份是 ...
- ArcGIS api for javascript——加载查询结果,单击显示信息窗口
描述 本例在开始和地图交互前执行一个查询并加载结果.这允许用户点击任意郡县立即看到一个InfoWindow. QueryTask构造函数接受被查询的图层,即ESRI sample server上ESR ...
- VC:当前不会命中断点,还没有为该文档载入不论什么符号
VS2013中设置的断点无效:"当前不会命中断点,还没有为该文档载入不论什么符号".问题主要出在没有生成调试信息.解决方法例如以下: (1)项目-〉属性-〉配置属性-〉C/C++- ...
- cocoapods的安装,使用,卸载,以及你可能会遇到的坑..
首先, 不会用cocoapods的话如过你接手某些新项目是用cocoapods写的你会疯, 其次他真的非常好用, 当然某些坑也是存在的,比方你用它导入了AFNetwork然后你须要改动一些AF的内部的 ...
- QThread 爬坑之旅(三种办法解决QObject: Cannot create children for a parent that is in a different thread)
Cannot create children for a parent that is in a different thread. 在Qt的官方文档,大家知道有两种方式使用QThread. You ...
- Codeforces 344C Rational Resistance
Description Mad scientist Mike is building a time machine in his spare time. To finish the work, he ...
- R学习:《R语言数据分析与挖掘实战》PDF代码
分三个部分:基础篇.实战篇.提高篇.基础篇介绍了数据挖掘的基本原理,实战篇介绍了一个个真实案例,通过对案例深入浅出的剖析,使读者在不知不觉中通过案例实践获得数据挖掘项目经验,同时快速领悟看似难懂的数据 ...
- 树莓派3b+ wifi无线连接
一.配置文件启动wifi 配置 /etc/network/interfaces 文件实现,但在图形界面上并没有wifi图标可以选择,这种方法不够灵活,后面连接其它的wifi都要去修改配置文件 首先打开 ...
- Springboot集成mybatis通用Mapper与分页插件PageHelper
插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作.通用 Mapper 是为了解决 MyBatis 使用 ...
- 使用LVS 实现负载均衡的原理。
LVS 负载均衡 负载均衡集群是 Load Balance 集群.是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端提供服务的一种方式.常用 的负载均衡. 开源软件有Nginx. ...