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

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

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

相关文章

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. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要