我是靠谱客的博主 虚幻铅笔,最近开发中收集的这篇文章主要介绍c++ 字符串数组长度排序_c++实现成绩排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    成绩排序是常有的需求,现在就来用c++实现一下640df74e33d7df6548a4b700cf57b607.png(简洁开场)

/1.需求/

    1.输入的第一行数据是学生的总数n,正整数,不会超过int的范围。

    2.接下来n行格式是:学生名称 学生语文成绩 学生数学成绩 学生英语成绩

    3.输出有n行,格式是:排名 学生名 学生总成绩

    4.输出按排名升序排列,排名根据总成绩计算。

    我们来分析一下这个需求,首先储存数据我们肯定需要数组,而这个数组的长度不定,需要让用户来定义,学生名称、学生成绩的数据类型不同,需要一个“可以同时盛放多个类型的复合类型”,排序就根据我们之前讲过的冒泡排序来排序。

/2.让用户定义长度的数组/

    之前讲过普通数组的定义方式:

类型 名称[长度] = {元素1,元素2...}

    有些时候,长度是一个不确定的值,这时候我们就需要使用变长数组来实现,注意,像下面的第二条语句是非法的:

类型 * 名称 = new 类型[不确定长度]// 类型 名称[不确定长度] = {...}使用数组delete[] 名称

        new用于申请一些内存空间并返回他们的地址,*代表指针,它指向这块地址,注意!new必须和delete配对!

    我们先定义一个用于存放学生数据的可变长数组:

#include using namespace std;int main(){  int n;  cin >> n;  ??? * stu = new ???[n];  delete[] stu;  return 0;}

    由于???这个数据类型必须要能储存多种类型的数据,所以我们要学习一种新的数据结构——结构体。

/2.结构体/

    结构体的定义简直不要太简单:

struct 结构体名{    数据类型 数据名;    数据类型 数据名;    ...};

    比如需要一个student结构体就可以这样定义:

struct student{  string name;  int chinese;  int math;  int english;};

    里面可以储存int类型的三个成绩和string类型的名字。

    string类型和char[]类型一样,都表示字符串,不过string包含在string头文件里且没有长度限制。

    那么如何创建一个结构体变量呢?很简单:

结构体名 变量名 = {数据1,数据2,数据3...};

    比如给student创建一个变量piggy,name为piggy,三门分数全部为1006ae220f49f910ec8101d7a43a6de3d92.png

student piggy = {"piggy",100,100,100};

    那么如何访问结构体里的数据呢?很简单,只需要用成员操作符 . 就可以了:

cout << piggy.name << ' '       << piggy.chinese  << ' '       << piggy.math << ' '       << piggy.english;

    这样就输出:

piggy 100 100 100

    记住,定义了一个结构体之后,要是使用这个结构体,就把这个结构体的名字当成一个类型就好了,定义结构体数组的格式如下:

普通数组:结构体名 名称[长度] = {{数据1,数据2,数据3...},{数据1,数据2,数据3...}...}变长数组:结构体名 * 名称 = new 结构体名[不确定长度]

    这样就可以把上面的问号补充完整了:

student * stu = new student[n];

/3.逐个读取数据/

  int n;  cin >> n;  student * stu = new student[n];  string na;  int c,m,e;  for (int i=0;i    cin >> na >> c >> m >> e;    stu[i].name = na;    stu[i].chinese = c;    stu[i].math = m;    stu[i].english = e;  }

    在8-11行,我们动态更改了结构体(数组里的结构体)变量,格式如下:

结构体(数组里的结构体)变量名.属性名 = 值

/4.排序数据/

    根据我们之前讲到过的算法,写出排序代码:

for (int i = 0;i-1;i++){    for (int j=0;j-1);j++){      if (stu[j].chinese + stu[j].math + stu[j].english < stu[j+1].chinese + stu[j+1].math + stu[j+1].english){        student tmp=stu[j];        stu[j]=stu[j+1];         stu[j+1]=tmp;      }    }  }

    接下来输入数据会输出相应排名6fd6200c343b765e1bc57856f6cedf08.png

9299771eb04aa4afdc839f82615d4ec0.png

    今天你学废了吗640df74e33d7df6548a4b700cf57b607.png源代码原文,提取码65kv。4e081a094799e762d81b05cb11982c5a.png

最后

以上就是虚幻铅笔为你收集整理的c++ 字符串数组长度排序_c++实现成绩排序的全部内容,希望文章能够帮你解决c++ 字符串数组长度排序_c++实现成绩排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部