十一级指针实现百万qq号的增删查改以及排序写入
运行结果:
内存使用情况:
写入文件排序好的数据:
- 创建文件地址以及创建十一级指针
1 char *path = "QQ.txt"; 2 char *sortpath = "QQchiguowei2018.txt"; 3 //创建十一级指针 4 char *********** allP = NULL;
- 初始化十一级指针
1 //初始化2 void init()3 {4 5 FILE *pf = fopen(path, "r");6 if (pf==NULL)7 {8 9 printf("文件打开失败"); 10 return; 11 } 12 else 13 { 14 //读取每一行加载到allP中 15 for (int i = 0; i < allN; i++) 16 { 17 char str[50] = { 0 }; 18 fgets(str, 50, pf);//读取 19 char *tmpstr = convertQQ(str);//获取QQ号 20 21 if (isallnum(tmpstr)) 22 { 23 assignmem(&allP, 11, tmpstr);//分配内存 24 25 strcpy(allP[getnum(tmpstr[0])][getnum(tmpstr[1])][getnum(tmpstr[2])][getnum(tmpstr[3])][getnum(tmpstr[4])][getnum(tmpstr[5])][getnum(tmpstr[6])][getnum(tmpstr[7])][getnum(tmpstr[8])][getnum(tmpstr[9])], str); 26 27 } 28 } 29 } 30 fclose(pf); 31 }
- 字符串转提取qq号的函数
1 //字符串提取qq号2 char *convertQQ(char *str)3 {4 int length = strlen(str);//获取长度5 char *tmp = malloc(length + 1);6 strcpy(tmp, str);//拷贝,避免数据自动回收7 //获取第一个'-'的位置8 char *p = strchr(tmp, '-');9 if (p!=NULL) 10 { 11 *p = '\0'; 12 13 } 14 int count = strlen(tmp);//获取QQ长度 15 //如果长度小于10,则在前面置零,转换成十位,最后一位/0也写入,所以要从下标10开始,一共11位 16 if (count< 10) 17 { 18 for (int i = 10; i >= 0; i--, count--) 19 { 20 if (count>=0)//移动 21 { 22 tmp[i] = tmp[count]; 23 } 24 else 25 { 26 //填充0 27 tmp[i] = '0'; 28 } 29 } 30 } 31 return tmp; 32 }
- 判断是不是全是数字
1 //判断是不是全是数字2 int isallnum(char *str)//判断是否有非法字符3 {4 while (*str)5 {6 if (*str<'0' || *str>'9')7 {8 return 0;9 } 10 11 str++; 12 } 13 return 1; 14 15 }
- 获取对应数字
1 //获取对应的数字 2 int getnum(char ch) 3 { 4 return ch - '0';//0 1 5 }
- 分配内存 深度表示前面还有几颗星 如果还有一颗星则进行内存分配,刚开始前面有十一颗星
1 //分配内存 深度表示前面还有几颗星 如果还有一颗星则进行内存分配,刚开始前面有十一颗星2 void assignmem(char **pp,int deep,char *str)3 {4 //如果前面有一颗星5 if (deep==1)6 {7 //分配内存 获取qq号最后一位的数字8 pp[ getnum(*(str + 10 - deep))] = malloc(sizeof(char) * 50);9 //内存清零 10 memset(pp[getnum(*(str + 10 - deep))], 0, sizeof(char) * 50); 11 return; 12 } 13 14 //如果前边有十一颗星 15 if (deep==11) 16 { 17 if (allP) 18 { 19 assignmem(*pp, deep - 1, str);//递归调用 20 return; 21 } 22 else 23 { 24 //allP指向十个十级指针 25 allP = malloc(sizeof(char**********) * 10);//分配指针数组 26 memset(allP, '\0', sizeof(char*) * 10);//清零 27 assignmem(*pp, deep - 1, str);//递归调用 28 return; 29 } 30 } 31 32 //如果已经分配内存 33 if (pp[getnum(*(str + 10 - deep))]) 34 { 35 //递归调用 36 assignmem(pp[getnum(*(str + 10 - deep))], deep - 1, str); 37 } 38 //否则分配内存 39 else 40 { 41 pp[getnum(*(str + 10 - deep))] = malloc(sizeof(char*) * 10); 42 memset(pp[getnum(*(str + 10 - deep))], 0, sizeof(char*) * 10); 43 assignmem(pp[getnum(*(str + 10 - deep))], deep - 1, str);//递归调用 44 } 45 }
- 查询
1 //查询2 void search(char *str)3 {4 //判断是不是数字5 if (isallnum(str)==0)6 {7 return;8 }9 //如果查询的长度大于10 10 if (strlen(str)>10) 11 { 12 return; 13 } 14 15 //格式化成10位 16 char *tmp = malloc(11); 17 int count = strlen(str); 18 if (count<=10) 19 { 20 for (int i = 10; i>=0; i--,count--) 21 { 22 if (count>=0) 23 { 24 tmp[i] = str[count]; 25 } 26 else 27 { 28 tmp[i] = '0'; 29 } 30 } 31 } 32 else 33 { 34 printf("NO NO"); 35 return; 36 } 37 38 //依次判断内存是否存在 39 if (allP[getnum(tmp[0])]) 40 { 41 42 if (allP[getnum(tmp[0])][getnum(tmp[1])]) 43 { 44 45 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])]) 46 { 47 48 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])]) 49 { 50 51 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])]) 52 { 53 54 55 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])]) 56 { 57 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])]) 58 { 59 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])]) 60 { 61 62 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])]) 63 { 64 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])]) 65 { 66 67 printf("%s\n", allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])]); 68 return; 69 70 } 71 72 73 } 74 75 } 76 77 78 79 } 80 81 82 } 83 84 } 85 86 } 87 88 } 89 90 } 91 92 } 93 94 printf("没有找到"); 95 96 }
- 删除
1 //删除某个数据2 void deleteit(char *str)3 {4 if (isallnum(str) == 0)5 {6 return;7 }8 if (strlen(str)>10)9 {10 return;11 12 }13 char *tmp = malloc(11);14 int count = strlen(str);15 if (count <= 10)//007702507716 {17 for (int i = 10; i >= 0; i--, count--)18 {19 if (count >= 0)20 {21 tmp[i] = str[count];22 }23 else24 {25 tmp[i] = '0';26 }27 28 }29 30 }31 else32 {33 printf("NO NO");34 return;35 }36 //037 if (allP[getnum(tmp[0])])38 {39 40 if (allP[getnum(tmp[0])][getnum(tmp[1])])41 {42 43 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])])44 {45 46 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])])47 {48 49 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])])50 {51 52 53 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])])54 {55 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])])56 {57 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])])58 {59 60 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])])61 {62 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])])63 {64 free(allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])]);65 66 allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])] = NULL;67 return;68 69 }70 71 72 }73 74 }75 76 77 78 }79 80 81 }82 83 }84 85 }86 87 }88 89 }90 91 }92 93 94 95 96 97 printf("没有找到");98 99 100 }
- 增加QQ号购买平台
1 //插入某个数据2 void insert(char *str, char *pass)3 {4 5 6 if (isallnum(str) == 0)7 {8 return;9 }10 if (strlen(str)>10)11 {12 return;13 14 }15 char *tmp = malloc(11);16 int count = strlen(str);17 if (count <= 10)//007702507718 {19 for (int i = 10; i >= 0; i--, count--)20 {21 if (count >= 0)22 {23 tmp[i] = str[count];24 }25 else26 {27 tmp[i] = '0';28 }29 30 }31 32 }33 else34 {35 printf("NO NO");36 return;37 }38 //039 if (allP[getnum(tmp[0])])40 {41 42 if (allP[getnum(tmp[0])][getnum(tmp[1])])43 {44 45 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])])46 {47 48 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])])49 {50 51 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])])52 {53 54 55 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])])56 {57 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])])58 {59 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])])60 {61 62 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])])63 {64 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])])65 {66 printf("%s\n", allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])]);67 printf("已经存在");68 return;69 }70 else71 {72 int length = strlen(pass);73 allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])] = calloc(length + 1, 1);74 strcpy(allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])], pass);75 76 return;77 }78 79 80 }81 82 }83 84 85 86 }87 88 89 }90 91 }92 93 }94 95 }96 97 }98 99 } 100 101 printf("没有找到"); 102 103 104 }
- 修改
1 //改变某个数据2 void changeit(char *str, char *newpass)3 {4 5 6 7 if (isallnum(str) == 0)8 {9 return;10 }11 if (strlen(str)>10)12 {13 return;14 15 }16 char *tmp = malloc(11);17 int count = strlen(str);18 if (count <= 10)//007702507719 {20 for (int i = 10; i >= 0; i--, count--)21 {22 if (count >= 0)23 {24 tmp[i] = str[count];25 }26 else27 {28 tmp[i] = '0';29 }30 31 }32 33 }34 else35 {36 printf("NO NO");37 return;38 }39 //040 if (allP[getnum(tmp[0])])41 {42 43 if (allP[getnum(tmp[0])][getnum(tmp[1])])44 {45 46 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])])47 {48 49 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])])50 {51 52 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])])53 {54 55 56 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])])57 {58 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])])59 {60 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])])61 {62 63 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])])64 {65 if (allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])])66 {67 68 printf("已经存在");69 free(allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])]);70 int length = strlen(newpass);71 allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])] = calloc(length + 1, 1);72 strcpy(allP[getnum(tmp[0])][getnum(tmp[1])][getnum(tmp[2])][getnum(tmp[3])][getnum(tmp[4])][getnum(tmp[5])][getnum(tmp[6])][getnum(tmp[7])][getnum(tmp[8])][getnum(tmp[9])], newpass);73 74 75 return;76 }77 78 79 80 }81 82 }83 84 85 86 }87 88 89 }90 91 }92 93 }94 95 }96 97 }98 99 } 100 printf("没有找到"); 101 }
- 顺序写入文件
1 //递归写入到文件2 void memtofile(char **p, int deep, FILE *pf)3 {4 if (p == NULL)5 {6 return;7 }8 //如果深度为1(前面还有一颗星)写入9 if (deep==1) 10 { 11 for (int i = 0; i <10; i++) 12 { 13 if (p[i] != NULL) 14 { 15 fputs(p[i], pf);//写入 16 } 17 } 18 19 return; 20 } 21 22 for (int i = 0; i <10; i++) 23 { 24 memtofile(p[i], deep - 1, pf);//递归写入 25 } 26 } 27 28 29 //按qq号顺序写入 30 void sorttofile() 31 { 32 FILE *pf = fopen(sortpath, "w"); 33 memtofile(allP, 10, pf);//写入 34 fclose(pf); 35 }
- 测试
1 init();2 printf("init over sorttofile start");3 sorttofile();4 printf("\n sorttofile end");5 while (1)6 {7 int num;8 scanf("%d", &num);9 switch (num) 10 { 11 case 1: 12 { 13 char str[100] = { 0 }; 14 printf("请输入要查找的QQ", str); 15 scanf("%s", str); 16 search(str); 17 puts("search over"); 18 break; 19 } 20 case 2: 21 { 22 char str[100] = { 0 }; 23 printf("请输入要删除的QQ", str); 24 scanf("%s", str); 25 deleteit(str); 26 puts("delete over"); 27 break; 28 } 29 case 3: 30 { 31 char str[100] = { 0 }; 32 printf("请输入要插入的QQ", str); 33 scanf("%s", str); 34 35 char str1[100] = { 0 }; 36 printf("请输入要插入的QQpass", str1); 37 scanf("%s", str1); 38 39 insert(str, str1); 40 puts("insert over"); 41 break; 42 } 43 case 4: 44 { 45 char str[100] = { 0 }; 46 printf("请输入要change的QQ", str); 47 scanf("%s", str); 48 49 char str1[100] = { 0 }; 50 printf("请输入要change的QQpass", str1); 51 scanf("%s", str1); 52 53 changeit(str, str1); 54 puts("change over"); 55 break; 56 } 57 58 default: 59 break; 60 } 61 62 }
十一级指针实现百万qq号的增删查改以及排序写入相关推荐
- SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号
SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.什么是ADO.NET ADO.NET是一组 ...
- 六十六,完成SpringBoot项目中的员工增删查改功能
@Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 本次到了SpringBo ...
- 全自动申请qq号vbs代码
全自动申请qq号vbs代码 2011年08月25日 下面代码可以实现qq号自动申请,用不到5秒钟哦,不是糊弄你,不信自己试试 说是代码,其实是一种简单vbs脚本源码,打字很累,废话不多说,源码如下: ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 变量的地址就是指针,存放指针的变量就是指针变量(因而又叫作地址变量 address variable); 这个地址编号本身就是一个无符号的整数,在32位系统下为4字节(8位 ...
- QQ号终于可以当传家宝了!没车没房的,就留几个游戏账号给儿子吧?
"我死后,我的QQ账号怎么办?"这个网络时代的"灵魂发问",如今或许能找到答案了.除了QQ账号,游戏账号等是不是也可以被继承呢? 因为很多爱玩游戏的网友都氪金几 ...
- 随机生成10位数QQ号.c
// 随机生成十位数的QQ号,首位数只能为1,2,3#include <stdio.h> #include <stdlib.h> #include <time.h> ...
- 关于QQ号的分发管理机制的基本方案的设计猜想和分析讨论
关于QQ号的分发管理机制的基本方案的设计猜想和分析讨论 众所周知,QQ号最开始是5位,后来逐渐变为11位,我开始用QQ的时候,一般都是申请到10位,有时候能申请到9位,据说还有传闻"同学的同 ...
- 68.qq号索引结构体写入内存,并实现快速排序
1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体 2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件 3 #defi ...
- 手机号查QQ号(Python3版)
前言 看成了QQ号查手机号点了进来的请自觉关掉,避免"然并卵"!春节逛BBS无意看到一款小软件[手机号2QQ号],起初是想能不能实现批量,于是写了个python3版的测试(Linu ...
最新文章
- 不懂技术的人请不要对懂技术的人说这很容易
- windows批量创建域用户
- linux系统测试报告,[Linux-文件系统测试] -- Bonnie++测试
- 打造vim的python编辑器
- Git之pull后回退版本
- Asp.Net文件和文件夹操作大全
- linux修改web密码忘记,Ubuntu 直接修改IPMIweb登录密码
- 《Deep Snake for Real-Time Instance Segmentation》
- excel怎么下方方格子_Excel重复值的坑,你踩过几个?
- [转]linux 系统 errno.h错误码
- matlab色散光纤,基于MATLAB的高速光通信色散补偿技术
- 商业价值:中国互联网的产品经理时代
- 如何连接局域网_Minecraft我的世界局域网联机问题(windows平台)
- VMX 进程已提前退出。VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。
- SpringUtil 工具类
- 数据链路层协议的功能不包括( )
- 安装Windows 10X 教你如何安装Win10X正式版 及下载地址Win10X 20279.1002
- 概率论:均值、方差与协方差矩阵
- input禁止自动填充
- learnpythonthehardway.org_Python学习笔记LearnPythonHardWay
热门文章
- java中toarray()的 用法_java容器中toArray的用法
- python装饰器 property_python装饰器--@property
- r roc函数_一棵树专栏 | ROC分析时一定要告诉R分析谁
- java 生成objectid_【Java】唯一ID的几种生成方案
- mysql ---- limit使用方式
- 2019招商银行M-Geeker线上比赛题解析
- WebDriver自动化测试工具(3)---PhantomJS的使用
- node 命令行升级版本
- CentOS6.4卸载自带的OpenJDK并安装jdk1.6.21
- ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)