Hỏi bài tập oop c++

Em có 1 file chứa các thông tin học sinh như sau:

Student: 2127831 - Tran Huu Minh
    GPA=7.30, Telephone=0909-888-773
    [email protected]
    DOB=17/12/2003
    Address=8 Nguyen Dinh Chieu, Ward 5, District 3, Ho Chi Minh city
Student: 2127832 - Nguyen Dieu Linh
    GPA=9.22, Telephone=0912-351-718
    [email protected]
    DOB=23/09/2003
    Address=22 Ngo Thoi Nhiem, Ward 2, District 1, Ho Chi Minh city 
Student: 2127833 - Ngo Thoi Chanh
    GPA=8.12, Telephone=0977-161-237
    [email protected]
    DOB=12/06/2003
    Address=8 Binh Long, Binh Hung Hoa Ward, Bin Tan District, Ho Chi Minh city

Em muốn hỏi là làm sao đọc thông tin trong file này để tính được GPA trung bình và in các thông tin như thế này ra

2127831 - Tran Huu Minh, GPA:7.30
2127832 - Nguyen Dieu Linh, GPA:9.22
2127833 - Ngo Thoi Chanh, GPA:8.12

đây là code của em ạ

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class student
{
private:
	int code;
	string name;
	float gpa;
	string tel;
	string email;
	string dob;
	string add;
public:
	student();
	student(int, string, float, string, string, string, string);
	~student();


	int getcode();
	string getname();
	float getgpa();
	string gettel();
	string getemail();
	string getdob();
	string getadd();


	void setcode(int);
	void setname(string);
	void setgpa(float);
	void settel(string);
	void setemail(string);
	void setdob(string);
	void setadd(string);
};
student::student()
{
	code = NULL;
	name = " ";
	gpa = NULL;
	tel = " ";
	email = " ";
	dob = " ";
	add = " ";
}
student::student(int _code, string _name, float _gpa, string _tel, string _email, string _dob, string _add)
{
	code = _code;
	name = _name;
	gpa = _gpa;
	tel = _tel;
	email = _email;
	dob = _dob;
	add = _add;
}
student::~student()
{
	code = NULL;
	name.clear();
	gpa = NULL;
	tel.clear();
	email.clear();
	dob.clear();
	add.clear();
}

int student::getcode() {
	return code;
}
string student::getname() {
	return name;
}
float student::getgpa() {
	return gpa;
}
string student::gettel() {
	return tel;
}
string student::getemail() {
	return email;
}
string student::getdob() {
	return dob;
}
string student::getadd() {
	return add;
}




void student::setcode(int _code)
{
	code = _code;
}
void student::setname(string _name)
{
	name = _name;
}
void student::setgpa(float _gpa)
{
	gpa = _gpa;
}
void student::settel(string _tel)
{
	tel = _tel;
}
void student::setemail(string _email)
{
	email = _email;
}
void student::setdob(string _dob)
{
	dob = _dob;
}
void student::setadd(string _add)
{
	add = _add;
}
int main()
{   
    ifstream ifs("student.txt");
    if (!ifs) {
        cerr << "Error: file not opened." << endl;
        return 1;
    }
    ifs.close();
}

em đọc từng dòng rồi tách chuỗi mỗi dòng ra thôi :V

3 Likes

em đọc từng dòng mà ko biết tách như thế nào để chỉ lấy mssv, tên, với gpa để tính gpa trung bình á

Regex thần chưởng !

Cái môn này thì mình dùng vs Python nhiều còn C++ thì chưa bao giờ nhưng chắc tương tự…

1 Like
  • std::string có hàm std::string::find(char) trả về index của char đó trong string
  • std::string có hàm std::string::rfind(char) trả về index của char đó trong string, nhưng tìm theo chiều từ phải qua trái :V
  • std::string có hàm std::string::substr(index, length) trả về chuỗi con của string đó bắt đầu từ index và có độ dài length

xài 3 hàm này là bóc tách được rồi :V

  • Dòng đầu tiên

    Student: 2127831 - Tran Huu Minh
    

    tìm index i của ký tự - là tách được id là chuỗi con của dòng này từ index 9 (9 ký tự trong chuỗi "Student: "), có length là i - 1 (lùi lại bỏ dấu cách) - 9 (9 ký tự trong chuỗi "Student: ")

  • Dòng kế tiếp

    GPA=7.30, Telephone=0909-888-773
    

    tìm index dấu = thứ nhất bằng hàm find, rồi tìm index dấu ,, rồi tìm index dấu = thứ 2 bằng hàm rfind. Từ đó lấy chuỗi con gpa, telephone dễ dàng rồi :V

  • v.v…

4 Likes

em cảm ơn nhiều ạ <3

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?