程序设计实习MOOC/6908/C:简单的学生信息处理程序实现

C:简单的学生信息处理程序实现

总时间限制: 1000ms 内存限制: 65536kB
描述
在一个学生信息处理程序中,要求实现一个代表学生的类,并且所有成员变量都应该是私有的。

(注:评测系统无法自动判断变量是否私有。我们会在结束之后统一对作业进行检查,请同学们严格按照题目要求完成,否则可能会影响作业成绩。)

输入
姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。

其中姓名、学号为字符串,不含空格和逗号;年龄为正整数;成绩为非负整数。

各部分内容之间均用单个英文逗号","隔开,无多余空格。
输出
一行,按顺序输出:姓名,年龄,学号,四年平均成绩(向下取整)。

各部分内容之间均用单个英文逗号","隔开,无多余空格。
样例输入

Tom,18,7817,80,80,90,70

样例输出

Tom,18,7817,80

题解分析

主要是处理字符串的问题。我把输入当作一个字符串放在sting类型的input变量里,然后用string自带的find()和substr()方法对字符串进行处理,分割出7个字符串,存放在字符串数组inputArr中。然后把这7个字符串传入student类的构造函数中,在自定义的student类的构造函数里,利用stringstream类把string类型转换成int类型。再分别写四个getX()函数返回私有成员变量。

处理输入字符串的代码片段

    while(-1 != posEnd)
    {
        posEnd = input.find(",", posStart);
        len = posEnd - posStart;
        inputArr[arrPos++] = input.substr(posStart, len);
        posStart = posEnd + 1;
    }

string转换成int代码片段

    stringstream sa;
    sa << sAge;        //string sAge;
    sa >> age;        //int age;

完整代码

#include<iostream>
#include<string>
#include<string.h>
#include<cstdio>
#include<stdlib.h>
#include<sstream>
using namespace std;
class student
{
private:
    string name;
    string sno;
    int age;
    int avgGrade;
public:
    student(string sName, string sAge, string sSno, string grade1, string grade2, string grade3, string grade4): name(sName), sno(sSno)
    {
        int sum = 0;
        int tgrade = 0;
        stringstream s1;
        stringstream s2;
        stringstream s3;
        stringstream s4;
        stringstream sa;
        sa << sAge;
        sa >> age;
        s1 << grade1;
        s1 >> tgrade;
        sum += tgrade;
        s2 << grade2;
        s2 >> tgrade;
        sum += tgrade;
        s3 << grade3;
        s3 >> tgrade;
        sum += tgrade;
        s4 << grade4;
        s4 >> tgrade;
        sum += tgrade;
        avgGrade = sum / 4;
    }
    string getName()
    {
        return name;
    }
    string getSno()
    {
        return sno;
    }
    int getAge()
    {
        return age;
    }
    int getAvgGrade()
    {
        return avgGrade;
    }
};
int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("mout.txt", "w", stdout);
    string input;
    string inputArr[7];
    int arrPos = 0;
    int posStart = 0;
    int posEnd = 0;
    int len = 0;
    while(cin >> input)
    {
        arrPos = 0;
        posStart = 0;
        posEnd = 0;
        len = 0;
        while(-1 != posEnd)
        {
            posEnd = input.find(",", posStart);
            len = posEnd - posStart;
            inputArr[arrPos++] = input.substr(posStart, len);
            posStart = posEnd + 1;
        }
        student stud(inputArr[0], inputArr[1], inputArr[2], inputArr[3], inputArr[4], inputArr[5], inputArr[6]);
        cout << stud.getName() << "," << stud.getAge() << "," << stud.getSno() << "," << stud.getAvgGrade();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值