1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体
  2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件
  3 #define _CRT_SECURE_NO_WARNINGS
  4 #include<stdio.h>
  5 #include<stdlib.h>
  6
  7 char path[256] = "QQ.txt";
  8 char indexpath[256] = "QQindex8848.txt";
  9 char sortindexpath[256] = "QQsortindex8848.txt";
 10
 11 #define allN 84331072
 12
 13 struct INDEX
 14 {
 15     //QQ号
 16     long long QQ;
 17     //索引
 18     int index;
 19 };
 20 //简化索引
 21 typedef struct INDEX Index;
 22
 23 //从字符串获取qq号,存放在tmp中,并在tmp中提取QQ号
 24 void getQQ(char *str, char *tmp)
 25 {
 26     strcpy(tmp, str);
 27     char *p = tmp;
 28     while (*p)
 29     {
 30         if (*p == '-')
 31         {
 32             *p = '\0';
 33             break;
 34         }
 35         p++;
 36     }
 37 }
 38
 39 //每一行读取到索引
 40 void main1()
 41 {
 42     FILE *pfr = fopen(path, "r");
 43     FILE *pfw = fopen(indexpath, "wb");
 44
 45     while (!feof(pfr))
 46     {
 47         //获取当前文件指针距离开头的位置,在读取之前读取,读取的是每一行开头的位置
 48         int index = ftell(pfr);
 49
 50         char str[50] = { 0 };
 51         //读取
 52         fgets(str, 50, pfr);
 53         char tmp[50] = { 0 };
 54         //获取QQ到tmp
 55         getQQ(str, tmp);
 56         //把QQ转换成long long类型
 57         long long lltmp = atoll(tmp);
 58         if (lltmp==0)
 59         {
 60             continue;
 61         }
 62         Index in1 = { 0 };
 63         in1.QQ = lltmp;
 64         in1.index = index;
 65         //把索引结构体写入
 66         fwrite(&in1, sizeof(in1), 1, pfw);
 67     }
 68
 69     fclose(pfr);
 70     fclose(pfw);
 71     printf("索引OK");
 72     system("pause");
 73 }
 74
 75 //比较两个结构体
 76 int com(void *p1, void *p2)
 77 {
 78     Index *pl1 = p1;
 79     Index *pl2 = p2;
 80     if (pl1->QQ >pl2->QQ)
 81     {
 82         return 1;
 83     }
 84     else if (pl1->QQ <pl2->QQ)
 85     {
 86         return -1;
 87     }
 88     else
 89     {
 90         return 0;
 91     }
 92
 93 }
 94
 95 //读取到结构体
 96 void main()
 97 {
 98     FILE *pfr = fopen(indexpath, "rb");
 99     FILE *pfw = fopen(sortindexpath, "wb");
100     //分配这么多个索引结构体(包括qq号和位置),并读取
101     Index *p = malloc(allN*sizeof(Index));
102     fread(p, sizeof(Index), allN, pfr);
103
104     //对读取的结构体进行排序
105     qsort(p, sizeof(Index), allN,com );
106
107     //写入
108     fwrite(p, sizeof(Index), allN, pfw);
109
110     //关闭文件
111     fclose(pfr);
112     fclose(pfw);
113
114     system("pause");
115 }

转载于:https://www.cnblogs.com/xiaochi/p/8445869.html

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

  1. 更改结构体的内存字节对齐方式--经典

    结构体字节对齐 http://blog.163.com/ecy_fu/blog/static/4445126200910603739941/ http://hi.baidu.com/skyland_l ...

  2. c 定义结构体时提示应输入声明_C++|了解结构体的内存对齐(成员声明的顺序影响占用空间大小)...

    我们使用的电子计算机绝大部分都是冯·诺依曼结构的机器,遵循"存储程序"的概念.数据处理以存储为前提,在编程中数据如何"存得进去,取得出来",并且符合空间.时间效 ...

  3. 从结构体、内存池初始化到申请释放,详细解读鸿蒙轻内核的动态内存管理

    摘要:本文带领大家一起剖析了鸿蒙轻内核的动态内存模块的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dyna ...

  4. c语言怎么往结构体中传数据,怎么把文件数据写入结构体 c语言 怎么将结构体写入文件...

    怎么把结构体的数据写到文件中 C语言把一个结构体数组写入文件分三步: 以二进制写方式(wb)打开文件 调用写入函数fwrite()将结构体数据写入文件 关闭文件指针 相应的,读文件也要与之匹配: 以二 ...

  5. c语言中将结构体写入文件,C语言中将结构体写入文件

    可以使用fwrite()将一个结构体写入文件: fwrite(&some_struct,sizeof somestruct,1,fp); 对应的fread函数可以再把它读出来,此处fwrite ...

  6. c语言 增加 删除 修改的功能 不用链表,不用链表,单是结构体写入文件后,是否可以进行修改删除...

    不用链表,单是结构体写入文件后,是否可以进行修改删除 #include #include #include typedef struct Node { char  num[20]; char name ...

  7. 【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )

    文章目录 一.结构体中嵌套一级指针 1.声明 结构体类型 2.为 结构体 变量分配内存 ( 分配内存时先 为结构体分配内存 然后再为指针分配内存 ) 3.释放结构体内存 ( 释放内存时先释放 指针成员 ...

  8. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  9. C语言结构体占用内存总结

    C语言结构体占用内存总结 前几天有个小朋友问了我一下,关于C语言结构体占用空间的问题.觉得以后会对小可爱有点帮助,就打算先写一下. struct Test {int a;char b;int c; } ...

最新文章

  1. 把XML文件转换为字符串
  2. Android IOS WebRTC 音视频开发总结(四二)-- webrtc开发者大会
  3. 图解Windows下开发Objective-C程序之一 - 搭建Objective-C开发环境
  4. 森斯伯里管理奖学金 皇家工程学院
  5. 线段树之延时标记(区间修改)及lazy思想
  6. L2-007. 家庭房产
  7. [Java初探实例篇02]__流程控制语句知识相关的实例练习
  8. 小米无线显示与电脑连接到服务器,小米手机和电脑进行怎么无线连接
  9. 语音控制Office
  10. 微信公众号查券返利机器人搭建教程
  11. 全像素双核激光对焦拍照是个什么厉害玩意儿
  12. one-stage two-stage 的区别
  13. matlab 莫比乌斯曲面,神奇的莫比乌斯带,只有一个曲面可以无限循环
  14. png选项 无交错 交错_什么是交错内存?
  15. iOS常见问题笔记总结这是本人开发中遇见的一些常见问题处理方法的总结笔记,包括http访问配置、Alcatraz插件安装、最新cocoapod安装、真机运行出错等许多与参考笔记总结,希望对大家有所帮助
  16. 内存管理(四)SGI STL 空间配置器
  17. 中国古代兵器与兵书·铜兵生辉
  18. Fuchsia系统ninja编译
  19. 计算机科学导论+刘艺+pdf,计算机科学导论(机械工业出版社)刘艺 瞿高峰 习题答案.doc...
  20. mysql查找字符第n次出现位置_查找字符在字符串中第N次出现的位置

热门文章

  1. NET:Error Creating Control -Object Reference Not Set To An Instance Of Object
  2. php手机i选择图片多选,自定义照片选择器(可多选)
  3. STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)
  4. gamma 色彩饱和度_网页设计师的色彩:了解Gamma
  5. CHINA TOP国家杯:用电子竞技搭建中国文化走出去的平台
  6. LibOpenCM3(一) Linux下命令行开发环境配置
  7. C#下ECDsa签名、验签
  8. 崩坏三服务器维护,崩坏3登录过程所遇问题解决方法汇总
  9. C++中类(class)和结构(struct)的区别
  10. 纽约州立大学环境与林业学院计算机科学专业,纽约州立大学环境与林业学院研究生专业 如何应对严峻的环境污染问题...