运行结果:

内存使用情况:

写入文件排序好的数据:

  • 创建文件地址以及创建十一级指针

     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号的增删查改以及排序写入的更多相关文章

  1. javascript入门 之 zTree(十四 增删查改)(二)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...

  2. javascript入门 之 zTree(十四 增删查改)(一)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeEditName / beforeRe ...

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

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

  4. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

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

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

  6. C语言复习:字符串和一级指针

    字符串基本操作 字符数组初始化方法 int main() {     //1 {}号法 初始化列表     //数组初始化有2种方法 默认元素个数.指定元素个数     char buf1[] = { ...

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

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

  8. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  9. php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。

    有可能有些输入,不希望让用户的评论或者私信中含有类似于QQ号,手机号的文本,比如交友网站.还有些恶意SEO通过,构造恶意检索词,检索词中包含QQ,手机号等,让百度爬取到,增加展现.也需要将这些检索词屏 ...

随机推荐

  1. ArcGIS api for javascript——地图配置-定制缩放动画

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  2. Qt之图形(转换)

    简述 QTransform类指定坐标系的2D转换,可以指定平移.缩放.扭曲(剪切).旋转或投影坐标系.绘制图形时,通常会使用. QTransform与QMatrix的不同之处在于,它是一个真正的3x3 ...

  3. STL 之 hash_map源代码剖析

    // Filename: stl_hash_map.h // hash_map和hash_multimap是对hashtable的简单包装, 非常easy理解 /* * Copyright (c) 1 ...

  4. MountService整理

    刚毕业时第一个接触的模块就是Vold.这个模块尽管小,但深入下去是有一定难度的. 花了点时间又一次整理了下这一块的逻辑,也当温习下这个模块. watermark/2/text/aHR0cDovL2Js ...

  5. java实习生的成长之路<转>

    首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set map,然后是线程.IO和jdbc什么的,其余的,若是一时不理解,可以后边需要时再学. 这阶段完了,你可以写些能在控 ...

  6. 轻松掌握Ubuntu Linux的3D桌面快捷键使用

    视频下载地址: http://115.com/file/be4n23v6#linux3d.rar 轻松掌握Ubuntu Linux的3D桌面快捷键使用 高级3D桌面展示 本文出自 "李晨光原 ...

  7. 记录一下 mysql 的查询中like字段的用法

    SELECT * from t_yymp_auth_role where role_name not like '%测试%' and role_name not like '%部门%' and rol ...

  8. C/C++(C++封装)

    封装 当单一变量无法完成描述需求的时候,结构体类型解决了这一问题.可以将多个类型打包成一体,形成新的类型.这是 c 语言中封装的概念.但是,新类型并不包含,对数据类的操作.所的有操作都是通过函数的方式 ...

  9. AOP 动态添加函数

    Function.prototype.before = function(beforefn) { // 保存原函数的引用 var self = this; // 返回包含了原函数和新函数的代理函数 r ...

  10. js002---- 标准内置对象

    1. js全局的对象(全局作用域里的对象,而不是全局对象), 或者叫标准内置对象 2, 全局对象  是一个Global类的对象. 标准内置对象的分类: 1. 值属性 infinity       Na ...