全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”

本文主要是介绍全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.2基于人员名单:

李爱华,北京

张立,吉林
吴祖含,上海
张颖,河北
李文虎,北京
许林,湖南
赵平复,河北
唐笑,北京
刘小明,河北

董其云,北京

统计其信息,输出格式如下:

北京

李爱华

李文虎 

唐笑 

董其云

 

河北

1

……

 

其中省份不用考虑顺序,人员之间不用考虑顺序。

 参考程序:

  1  #include  < stdio.h >
  2  #include  < string .h >
  3  #include  < stdlib.h >
  4 
  5  FILE  * stream;
  6  FILE  * streamOut;
  7 
  8 
  9  // 构造存储结构
 10  struct  Node{
 11       char  Pro[ 20 ]; // 存储省份
 12       char  Name[ 50 ]; // 存储名字
 13       int  counts;
 14      Node *  nextPro; // 下一省份结点
 15      Node *  nextName; // 下一人员结点
 16  };
 17 
 18  Node root; // 根结点
 19 
 20  // 添加新的省份到链表中
 21  void  addPro(Node *  node)
 22  {
 23      Node *  tNode = root.nextPro;
 24      root.nextPro = node;
 25      node -> nextPro = tNode; // 插入结点
 26  }
 27 
 28  // 插入proNode结点后名字
 29  // pronode中的省份跟新插入结点的省份相同
 30  void  addName(Node *  proNode,Node *  node)
 31  {
 32      Node *  pNode = proNode -> nextName;
 33      proNode -> nextName = node;
 34      node -> nextName = pNode;
 35      proNode -> counts ++ ;
 36  }
 37 
 38  // 添加一个结点,根据判断是否之前出现过,进行插入或者新建的工作
 39  // 需要调用addName()和addPro()两个函数
 40  void  addNode(Node *  node)
 41  {
 42       if (root.nextPro == NULL) // 首次加入
 43      {
 44          root.nextPro = node;
 45      }
 46       else
 47      {
 48           // 循环找到相同的省份头结点
 49          Node *  cuNode = root.nextPro;
 50           while (cuNode != NULL  &&  strcmp(cuNode -> Pro,node -> Pro) != 0 )
 51          {
 52              cuNode = cuNode -> nextPro;
 53          }
 54           if (cuNode == NULL) // 没有找到相同省份的结点出现
 55          {
 56              addPro(node);
 57          }
 58           else
 59          {
 60              addName(cuNode,node);
 61          }
 62      }
 63  }
 64 
 65  // 对同级的结果进行格式化的输出
 66  void  outputFile()
 67  {
 68       if  ((streamOut  =  fopen(  " 人员名单2.txt " " w "  ))  !=  NULL)
 69      {
 70          Node *  pNode = root.nextPro;
 71           while (pNode != NULL)
 72          {
 73              fprintf(streamOut, " %s " ,pNode -> Pro);
 74              fprintf(streamOut, " %d\n " ,pNode -> counts);
 75               for (Node *  t = pNode;t != NULL;t = t -> nextName)
 76              {
 77                  fprintf(streamOut, " %s\n " ,t -> Name);
 78                   if (t -> nextName == NULL)
 79                      fprintf(streamOut, " \n " );
 80              }
 81              pNode = pNode -> nextPro;
 82          }
 83          fclose( streamOut );
 84      }
 85  }
 86 
 87 
 88  void  releaseNode()
 89  {
 90 
 91      Node *  tNode = root.nextPro;
 92      Node *  toDel;
 93       while (tNode != NULL)
 94      {
 95          Node *  delN = tNode -> nextName;
 96           while (delN != NULL)
 97          {
 98              Node *  de = delN;
 99              delN = delN -> nextName;
100              free(de);
101          }
102          toDel = tNode;
103          tNode = tNode -> nextPro;
104          free(toDel);
105      }
106  }
107  int  main()
108  {
109      
110       char  line[ 100 ];
111       int  position;
112 
113       // 初始化
114      root.nextPro = NULL;
115      root.nextName = NULL;
116 
117       if ( (stream  =  fopen(  " 人员名单.txt " " r "  ))  !=  NULL )
118      {
119           // printf("打开成功\n");
120           while (fgets( line,  100 , stream )  !=  NULL)
121          {
122               int  len = strlen(line);
123               // printf("%d\n",len);
124               if (feof(stream))
125              {
126                  line[len] = ' \n ' ;
127                  line[len + 1 ] = ' \0 ' ;
128                  len = strlen(line);
129                   // printf("%d\n",len);
130              }
131              
132              position = strcspn(line, " , " );
133               if (position != 0 ) // 分隔成功
134              {
135                  line[position] = ' \0 ' ;
136                  Node *  node = (Node * )malloc( sizeof (Node));
137                   // 清空数据
138                   // memset(node->Pro,0,sizeof(node->Pro));
139                   // memset(node->Name,0,sizeof(node->Name));
140                  node -> nextPro = NULL;
141                  node -> nextName = NULL;
142                  node -> counts = 1 ;
143                  strcpy(node -> Name,line);
144                  strcpy(node -> Pro, & line[position + 1 ]);
145                  addNode(node);
146              }
147               // printf( "%s", line);
148          }
149          outputFile();
150          releaseNode();
151          fclose( stream );
152          
153      }
154       return   1 ;
155  }
156 

 

版权声明版权归作者WeiSteven所有,转载请注明! 

这篇关于全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678576

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做