程式設計實習MOOC/6908/C:簡單的學生資訊處理程式實現

afra發表於2019-05-11

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();
    }
}

相關文章