c++学生管理系统

想要实现的功能

1,可以增加学生的信息,包括(姓名,学号,c++成绩,高数成绩,英语成绩)

2,可以删除学生信息

3,修改学生信息

4,显示所有学生信息

5,查询学生信息

6,把所有学生根据平均成绩进行排名

注意:以下写作流程是按照思考的顺序书写的,如果想看完整代码,看最后!!!

大致思路:

首先创建一个Student类,这类里面包含学生的姓名,学号,c++成绩,高数成绩,英语成绩。在创建一个班级类,将学生类作为成员变量,这样每一个学生就可以放到班级类这个里面。

class Student {
private:
    string _name;
    string _stuNum;
    double _gradeC;
    double _gradeM;
    double _gradeE;
public:

    Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
        :_name(name)
        , _stuNum(stuNum)
        , _gradeC(gradeC)
        , _gradeM(gradeM)
        , _gradeE(gradeE)
    {}

}

————————————————————————————————————

class StudentClass {
private:
    Student* _arr;
    int _useSize;
    int _capacity;
public:
    StudentClass(int capacity = 4) {
        
        _arr = new Student[capacity];
        _useSize = 0;
        _capacity = capacity;   

 }

————————————————————————————————————

然后写运行的大致框架:首先,实例化一个班级。打印出一个菜单,菜单上有各种那个操作。然后写一个循环(do-while循环:最少循环一次)然后输入要进行的操作,通过(switch)语句,对应到相应操作的语句。

void menu() {
    cout << "1,学生信息录入" << endl;
    cout << "2,删除学生信息" << endl;
    cout << "3,修改学生信息" << endl;
    cout << "4,显示所有学生信息" << endl;
    cout << "5,查询学生成绩" << endl;
    cout << "6,成绩排名" << endl;
    cout << "0,退出系统" << endl;
}

int main() {

    StudentClass studentClass(1);
    do
    {
        menu();
        cout << "请输入操作选项:" << endl;
        int choice;
        cin >> choice;
        switch (choice) {
        case 1://学生信息录入
        {
            GetIn(studentClass);
            break;
        }
        case 2://删除学生信息
        {
            Delete(studentClass);
            break;
        } 
        case 3://修改学生信息
        {
            Amend(studentClass);
                break;
        }
        case 4://显示所有学生信息
        {
            Print(studentClass);
            break;
        }
        case 5://查询学生成绩
        {
            Search(studentClass);
            break;
        }

       case 6://成绩排名
        {   Order(studentClass);
            break;
        }
        case 0:
            cout << " 退出系统" << endl;
            exit(0);
        default:
            cout << "输入错误,重新输入:" << endl;
            break;
        }
    } while (1);

    return 0;
}

达到这种效果:

________________________________________________________________

第一个操作对应的功能:

分别输入姓名,学号,c++成绩,高数成绩,英语成绩,然后实例化一个学生的引用。将这些作为构造函数是参数。然后将这个“学生”放到“班级”里面。想要实现这个操作就要在班级这个类里面写一个成员函数。把这个学生对象放到班级类指定的空间里面。这时就需要考虑班级这个类在初始化的时候开辟的空间是否够用。如果不够放下这个“学生”就要考虑扩容。

void GetIn(StudentClass& studentClass) {
    cout << "请输入学生信息->" << endl;
    cout << "姓名:" << endl;
    string name;
    cin >> name;
    cout << "学号:" << endl;
    string stuNum;
    cin >> stuNum;
    cout << "C语言成绩:" << endl;
    double a;
    cin >> a;
    cout << "高数成绩:" << endl;
    double b;
    cin >> b;
    cout << "英语成绩:" << endl;
    double c;
    cin >> c;
    Student stu(name, stuNum, a, b, c);
    studentClass.putin(stu);

}

————————————————————

注意:这是在班级这个类开辟的空间上,把学生这个对象放进去,所以这个函数是班级的成员函数

void putin(Student s) {
    if (_useSize == _capacity) {

        _capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2; 
        Student* temp = new Student[_capacity]; 
        for (int i = 0; i < _useSize; i++) {
            temp[i] = _arr[i]; 
        }
        delete[]_arr; 
        _arr = temp; 
    }
    _arr[_useSize] = s;
    _useSize++;
}

效果如图所示:

————————————————————————————————

第二个操作对应的功能:

删除学生信息,我们需要输入学生的姓名或者学号,如果没找到不作操作,如果找到了这位学生,按照如下图思路将其覆盖,也就是删除

void Delete(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.del(stuNum);
}

————————————————————

班级的成员函数:

void del(string num) {
    int x = getUseSize();
    int i;
    for (i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            break;
        }
    }
    if (i==x) {
        cout << "查无此人! 删除失败!!!" << endl;
        return;
    }else{
        for (;i < _useSize - 1;i++) {
            _arr[i] = _arr[i + 1];
        }
        _useSize--;
        cout << " 删除成功" << endl;
        return;
    }
}
int getUseSize() {
    return _useSize;
}

——————————————————————————

学生的成员函数(因为名字和学号都是私有,所以要有一个函数是的让这些数据可以得到,这样做的目的是不让成员变量随意被更改)

string getStuNum() {
    return _stuNum;
}
string getStuName() {
    return _name;
}

效果如图所示:

——————————————————————————————

第三个操作对应的功能:

修改学生信息首先输入学号或者姓名,找到这个学生。然后打印一个目录,上面为要修改的信息选项,然后选择要修改的内容做出修改

void fix(string num) {
    int x = getUseSize();
    int i = 0;
    for ( i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            _arr[i].print();
            do
            {
                menu();
                int choice;
                cin >> choice;
                switch (choice) {
                case 1:
                    cout << "请输入修改后的名字:" << endl;
                    _arr[i].fixname(Cin("a"));
                    _arr[i].print();
                    break;
                case 2:
                    cout << "请输入修改后的学号:" << endl;
                    _arr[i].fixnum(Cin("a"));
                    _arr[i].print();
                    break;
                case 3:
                    cout << "请输入修改后的C语言成绩:" << endl;
                    _arr[i].fixC(Cin(1.1));
                    _arr[i].print();
                    break;
                case 4:
                    cout << "请输入修改后的高数成绩:" << endl;
                    _arr[i].fixM(Cin(1.1));
                    _arr[i].print();
                    break;
                case 5:
                    cout << "请输入修改后的英语成绩:" << endl;
                    _arr[i].fixE(Cin(1.1));
                    _arr[i].print();
                    break;
                case 0:
                    cout << "完成修改" << endl;
                    _arr[i].print();
                    return;
                default:
                    cout << "输入错误,重新输入:" << endl;
                    break;
                }

            } while (1);
        }

    }
    if (i == x) {
        cout << "查无此人! 修改失败!!!" << endl;
        return;
    }
}

void menu() {
    cout << "1,修改姓名" << endl;
    cout << "2,修改学号" << endl;
    cout << "3,修改C语言成绩" << endl;
    cout << "4,修改高数成绩" << endl;
    cout << "5,修改英语成绩" << endl;
    cout << "0,完成修改" << endl;
}
string Cin(string) {
    string s;
    cin >> s;
    return s;
}
double Cin(double) {
    double s;
    cin >> s;
    return s;
}

——————————————————————————————————————

void fixname(string s) {
    _name = s;
}
void fixnum(string s) {
    _stuNum = s;
}
void fixC(double x) {
    _gradeC = x;
}
void fixM(double x) {
    _gradeM = x;
}
void fixE(double x) {
    _gradeE = x;
}

void print() {
    cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
        << _gradeM << "  英语成绩:" << _gradeE << endl;
}

效果如下:

————————————————————————————————————

第四个操作对应的功能:

显示所以信息,只需要for循环班级指向的空间,将所有学生打印出来即可

void Print(StudentClass& studentClass) {
    studentClass.print();

}

————————————————

班级的成员函数:

void print() {
    int x = getUseSize();
    for (int i = 0;i < x;i++) {
        _arr[i].print();
    }
}

实现效果:

第五个操作对应的功能:

查询学生信息,for循化找到该学生然后打印这个学生的信息

void Search(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.grade(stuNum);

}

————————————————————————————

班级成员函数:

void grade(string num) {
    int x = getUseSize();
    int i = 0;
    for (i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            _arr[i].getgrade();
            return;
        }
    }
    if (i == x) {
        cout << "查无此人!" << endl;
        return;
    }
}

——————————————————————————————————

学生成员函数:

void getgrade() {
    cout << "姓名:" << _name << endl;
    cout << endl;
    cout << " C语言成绩:" << _gradeC << "  高数成绩" << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage() << endl;
}

效果如下:

第六个操作对应的功能:

排序,实例化一个临时班级对象,将原来的班级拷贝到这个临时对象上面,对临时对象进行排序(冒泡排序),然后依次打印

StudentClass(StudentClass& stuclass) {
    
        _arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
        if (NULL == _arr) {
            perror("申请空间失败");
            return;
        }
        memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
        _useSize = stuclass._useSize;
        _capacity = stuclass._capacity;
    
}

-------------------------------------------------——————————————

void Order(StudentClass& studentClass) {
    StudentClass stuclass = studentClass;
    studentClass.order(stuclass);
    stuclass.print1();
}

————————————————————————————————

班级成员变量:

void swap(Student& p1, Student& p2) {
    Student tmp = p2;
    p2 = p1;
    p1 = tmp;
}

void order(StudentClass& stuclass) {
    int x = getUseSize();
    for (int i = 0;i < x;i++) {
        for (size_t j = 0; j < x-i-1; j++)
        {
            if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
                swap(stuclass._arr[j], stuclass._arr[j + 1]);
            }
        }
        
    }

}

——————————————————————————————

学生成员变量:

void getordergrade() {
    cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
        << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage()<< endl;
    
}

效果:

全部代码:

#include<iostream>
#include<string>
using namespace std;


class Student {
private:
    string _name;
    string _stuNum;
    double _gradeC;
    double _gradeM;
    double _gradeE;
public:

    Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
        :_name(name)
        , _stuNum(stuNum)
        , _gradeC(gradeC)
        , _gradeM(gradeM)
        , _gradeE(gradeE)
    {}
    void print() {
        cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
            << _gradeM << "  英语成绩:" << _gradeE << endl;
    }
    string getStuNum() {
        return _stuNum;
    }
    string getStuName() {
        return _name;
    }
    void getgrade() {
        cout << "姓名:" << _name << endl;
        cout << endl;
        cout << " C语言成绩:" << _gradeC << "  高数成绩" << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage() << endl;
    }
    void getordergrade() {
        cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
            << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage()<< endl;
        
    }
    double everage() {
        return (_gradeC + _gradeM + _gradeE) / 3;
    }
    void fixname(string s) {
        _name = s;
    }
    void fixnum(string s) {
        _stuNum = s;
    }
    void fixC(double x) {
        _gradeC = x;
    }
    void fixM(double x) {
        _gradeM = x;
    }
    void fixE(double x) {
        _gradeE = x;
    }
};


class StudentClass {
private:
    Student* _arr;
    int _useSize;
    int _capacity;
public:
    StudentClass(StudentClass& stuclass) {
        
            _arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
            if (NULL == _arr) {
                perror("申请空间失败");
                return;
            }
            memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
            _useSize = stuclass._useSize;
            _capacity = stuclass._capacity;
        
    }
    StudentClass(int capacity = 4) {
        
        _arr = new Student[capacity];
        _useSize = 0;
        _capacity = capacity;
        

    }
    void putin(Student s) {
        if (_useSize == _capacity) {

            _capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2; 
            Student* temp = new Student[_capacity]; 
            for (int i = 0; i < _useSize; i++) {
                temp[i] = _arr[i]; 
            }
            delete[]_arr; 
            _arr = temp; 
        }
        _arr[_useSize] = s;
        _useSize++;
    }

    void del(string num) {
        int x = getUseSize();
        int i;
        for (i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                break;
            }
        }
        if (i==x) {
            cout << "查无此人! 删除失败!!!" << endl;
            return;
        }else{
            for (;i < _useSize - 1;i++) {
                _arr[i] = _arr[i + 1];
            }
            _useSize--;
            cout << " 删除成功" << endl;
            return;
        }
    }
    int getUseSize() {
        return _useSize;
    }

    void print() {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            _arr[i].print();
        }
    }
    void print1() {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            _arr[i].getordergrade();
        }
    }
    void grade(string num) {
        int x = getUseSize();
        int i = 0;
        for (i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                _arr[i].getgrade();
                return;
            }
        }
        if (i == x) {
            cout << "查无此人!" << endl;
            return;
        }
    }
    void menu() {
        cout << "1,修改姓名" << endl;
        cout << "2,修改学号" << endl;
        cout << "3,修改C语言成绩" << endl;
        cout << "4,修改高数成绩" << endl;
        cout << "5,修改英语成绩" << endl;
        cout << "0,完成修改" << endl;
    }
    string Cin(string) {
        string s;
        cin >> s;
        return s;
    }
    double Cin(double) {
        double s;
        cin >> s;
        return s;
    }
    void fix(string num) {
        int x = getUseSize();
        int i = 0;
        for ( i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                _arr[i].print();
                do
                {
                    menu();
                    int choice;
                    cin >> choice;
                    switch (choice) {
                    case 1:
                        cout << "请输入修改后的名字:" << endl;
                        _arr[i].fixname(Cin("a"));
                        _arr[i].print();
                        break;
                    case 2:
                        cout << "请输入修改后的学号:" << endl;
                        _arr[i].fixnum(Cin("a"));
                        _arr[i].print();
                        break;
                    case 3:
                        cout << "请输入修改后的C语言成绩:" << endl;
                        _arr[i].fixC(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 4:
                        cout << "请输入修改后的高数成绩:" << endl;
                        _arr[i].fixM(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 5:
                        cout << "请输入修改后的英语成绩:" << endl;
                        _arr[i].fixE(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 0:
                        cout << "完成修改" << endl;
                        _arr[i].print();
                        return;
                    default:
                        cout << "输入错误,重新输入:" << endl;
                        break;
                    }

                } while (1);
            }

        }
        if (i == x) {
            cout << "查无此人! 修改失败!!!" << endl;
            return;
        }
    }

    void swap(Student& p1, Student& p2) {
        Student tmp = p2;
        p2 = p1;
        p1 = tmp;
    }

    void order(StudentClass& stuclass) {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            for (size_t j = 0; j < x-i-1; j++)
            {
                if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
                    swap(stuclass._arr[j], stuclass._arr[j + 1]);
                }
            }
            
        }

    }
};


void menu() {
    cout << "1,学生信息录入" << endl;
    cout << "2,删除学生信息" << endl;
    cout << "3,修改学生信息" << endl;
    cout << "4,显示所有学生信息" << endl;
    cout << "5,查询学生成绩" << endl;
    cout << "6,成绩排名" << endl;
    cout << "0,退出系统" << endl;
}

void GetIn(StudentClass& studentClass) {
    cout << "请输入学生信息->" << endl;
    cout << "姓名:" << endl;
    string name;
    cin >> name;
    cout << "学号:" << endl;
    string stuNum;
    cin >> stuNum;
    cout << "C语言成绩:" << endl;
    double a;
    cin >> a;
    cout << "高数成绩:" << endl;
    double b;
    cin >> b;
    cout << "英语成绩:" << endl;
    double c;
    cin >> c;
    Student stu(name, stuNum, a, b, c);
    studentClass.putin(stu);

}
void Delete(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.del(stuNum);
}

void Amend(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.fix(stuNum);
}

void Print(StudentClass& studentClass) {
    studentClass.print();

}

void Search(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.grade(stuNum);

}

void Order(StudentClass& studentClass) {
    StudentClass stuclass = studentClass;
    studentClass.order(stuclass);
    stuclass.print1();
}

int main() {

    StudentClass studentClass(1);
    do
    {
        menu();
        cout << "请输入操作选项:" << endl;
        int choice;
        cin >> choice;
        switch (choice) {
        case 1://学生信息录入
        {
            GetIn(studentClass);
            break;
        }
            
        case 2://删除学生信息
        {
            Delete(studentClass);
            break;
        }
            
        case 3://修改学生信息
        {
            Amend(studentClass);
                break;
        }
            
        case 4://显示所有学生信息
        {
            Print(studentClass);
            break;
        }
            
        case 5://查询学生成绩
        {
            Search(studentClass);
            break;
        }

        case 6://成绩排名
        {   Order(studentClass);
            break;
        }
        case 0:
            cout << " 退出系统" << endl;
            exit(0);
        default:
            cout << "输入错误,重新输入:" << endl;
            break;
        }
    } while (1);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338817.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图形学初识--多边形剪裁算法

文章目录 前言正文为什么需要多边形剪裁算法&#xff1f;前置知识二维直线直线方程&#xff1a;距离本质&#xff1a;点和直线距离关系&#xff1a; 三维平面平面方程距离本质&#xff1a;点和直线距离关系&#xff1a; Suntherland hodgman算法基本介绍基本思想二维举例问题描…

uni-app解决表格uni-table样式问题

一、如何让表格文字只显示一行&#xff0c;超出部分用省略号表示 步骤 &#xff1a; 给table设置table-layout:fixed; 列宽由表格宽度和列宽度设定。&#xff08;默认是由单元格内容设定&#xff09;让表格元素继承父元素宽度固定table-layout: inherit;overflow: hidden;超过…

Docker安装启动Mysql

1、安装Docker&#xff08;省略&#xff09; 网上教程很多 2、下载Mysql5.7版本 docker pull mysql:5.7 3、查看镜像是够下载成功 docker images 4、启动镜像&#xff0c;生成容器 docker run --name mysql5.7 -p 13306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 5…

我成功创建了一个Electron应用程序

1.创建electron项目命令&#xff1a; yarn create quick-start/electron electron-memo 2选择&#xff1a;√ Select a framework: vue √ Add TypeScript? ... No √ Add Electron updater plugin? ... Yes √ Enable Electron download mirror proxy? ... Yes 3.命令&a…

services层和controller层

services层 我的理解&#xff0c;services层是编写逻辑代码语句最多的一个层&#xff0c;非常重要&#xff0c;在实际的项目中&#xff0c;负责调用Dao层中的mybatis&#xff0c;在我的项目中它调用的是这两个文件 举例代码如下 package com.example.sfdeliverysystem.servic…

基于单片机的 wifi 家电开关控制系统设计

摘要 : 本文是利用 51 单片机基础知识结合 wifi 通信技术完成的一套可通过手机无线遥控家电开关系统设计。整个系统以 STC89C51 单片机为核心&#xff0c;采用业界主流的 ESP8266wifi 模块作为通信模块&#xff0c;家电开关的自动控制部分采用 3 路继电器开关来实现。本系统的…

【python】多线程(3)queue队列之不同延时时长的参数调用问题

链接1&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;1&#xff09; 链接2&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;2&#xff09;Queue队列 0.问题描述 两个线程&#xff0c;但是不同延时时长&#xff0c;导致数据输出…

MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式 MyBatis-Dao层Mapper接口化开发 二、注意事项 1、Mapper接口与Mapper.xml映射文件要满足4个对应 &#xff08;1&#xff09;Mapper接口的全类名必须与Mapper映射文件中的namespace相同 &#xff08;2&#xff09;Mapper接口中的每一个方法名在Mapper映射文件…

961题库 北航计算机 操作系统 附答案 选择题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 计算机系统的组成包括&#xff08; &#xff09; A、程序和数据 B、处理器和内存 C、计算机硬件和计算机软件 D、处理器、存储器和外围设备 财务软件是一种&#xff…

iOS——类与对象底层探索

类和对象的本质 当我们使用OC创建一个testClass类并在main函数创建它的实例对象的时候&#xff0c;OC的底层到底是什么样的呢&#xff1f; 首先&#xff0c;我们要了解OC对象的底层结构&#xff0c;那么我们就得知道&#xff1a;OC本质底层实现转化其实都是C/C代码。 使用下面…

11Linux学习笔记

Linux 实操篇 目录 文章目录 Linux 实操篇1.rtm包&#xff08;软件&#xff09;1.1 基本命令1.2 基本格式1.3安装rtm包1.4卸载rtm包 2.apt包2.1 基本命令结构2.2 常用选项2.3常用命令 1.rtm包&#xff08;软件&#xff09; 1.1 基本命令 1.2 基本格式 1.3安装rtm包 1.4卸载r…

④单细胞学习-cellchat细胞间通讯

目录 1&#xff0c;原理基础 流程 受体配体概念 方法比较 计算原理 2&#xff0c;数据 3&#xff0c;代码运行 1&#xff0c;原理基础 原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov) GitHub - sqjin/CellChat: R toolk…

字符串操作java

题目&#xff1a; 描述 给定长度为n的只有小写字母的字符串s&#xff0c;进行m次操作&#xff0c;每次将[l,r]范围内所有c1字符改成c2&#xff0c;输出操作完的字符串 输入描述&#xff1a; 第一行两个数n,m 第二行一个字符串s 之后m行&#xff0c;每行两个数l 、r两个字符…

[DDR5 Jedec 4-1] 预充电命令 Precharge

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 1. 预充电&#xff08;Precharge&#xff09;含义 由于SDRAM的寻址具体独占性&#xff0c;因此在进行完读写操作后&#xff0c;若需对同一L-Bank的另一行进行寻址&#xff0c;则必须先关闭原…

针对大模型的上下文注入攻击

大型语言模型&#xff08;LLMs&#xff09;的开发和部署取得了显著进展。例如ChatGPT和Llama-2这样的LLMs&#xff0c;利用庞大的数据集和Transformer架构&#xff0c;能够产生连贯性、上下文准确性甚至具有创造性的文本。LLMs最初和本质上是为静态场景设计的&#xff0c;即输入…

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…

C++进阶之AVL树+模拟实现

目录 目录 一、AVL树的基本概念 1.1 基本概念 二、AVL树的模拟实现 2.1 AVL树节点的定义 2.2 插入操作 2.3 旋转操作 2.4 具体实现 一、AVL树的基本概念 1.1 基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

微信里的东西怎么打印出来呢

随着微信的普及&#xff0c;我们的日常生活和工作都离不开这个强大的社交工具。无论是重要的工作文件、孩子的作业、还是精彩的旅行照片&#xff0c;我们都习惯在微信里保存和分享。但是&#xff0c;当需要将这些微信里的内容打印出来时&#xff0c;很多人可能会感到困惑和麻烦…

【C++】vector的模拟实现

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 1. vector的核心框架接口 2. 构造函数 2.1 基本构造 2.2 拷贝构造&#xff08;传统写法&#xff09; 2.3 析构函数 2…

验证外星语词典

在解决算法题时&#xff0c;哈希表是经常被使用的工具&#xff0c;可以用来记录字符串中字母出现的次数&#xff0c;字符串中字符出现的位置等&#xff0c;这里用到的就是利用哈希表储存字符串中字符出现的的位置。 “外星语”的字母表顺序是不一样的&#xff0c;所以…