【发布时间】:2013-12-05 07:22:57
【问题描述】:
我正在尝试从冒号分隔的文件中将信息提取到类对象中。文件的每一行都以相同的格式设置。以下是文件的前几行:
s:Charles:Babbage:80:530213286:1133764834:mechanical engineering:3.8
e:Marissa:Meyer:37:549114177:53321:ceo:4456000
s:Alonzo:Church:92:586312110:1100539644:mathematics:4.0
e:Dana:Ulery:74:573811211:23451:engineer:124569
这是一个学校项目,目的是教我们关于类继承的知识。我们有一个基类 Person 和两个子类 Student 和 Employee。我们应该将学生的信息导入并存储到 Student 对象中,将员工信息导入并存储到 Employee 对象中。每个类都有一个对象数组;我将学生排序到 Student 对象数组中,对于员工也是如此,此外还将所有人添加到 People 对象数组中。
我不知道如何使用分隔逗号获取每条信息。现在我正在尝试使用 .getline 但它似乎不起作用。如何使用此函数(或其他函数)将分隔符之间的信息提取到 char 数组中?以下是我目前对于员工数据的情况:
ifstream fin;
char* tempImport;
tempImport = new char[50];
int* tempIntArray;
tempIntArray = new int[10];
double tempDouble;
int tempInt;
// get the specifier of student or employee
fin.getline(tempImport, ':');
if(tempImport[0]=='e'){
// get first name
fin.getline(tempImport, ':');
employees[employeeIndex].setFirstName(tempImport);
allPeople[personIndex].setFirstName(tempImport);
// get last name
fin.getline(tempImport, ':');
employees[employeeIndex].setFirstName(tempImport);
allPeople[personIndex].setFirstName(tempImport);
// get age
fin.getline(tempImport, ':');
employees[employeeIndex].setAge(tempImport[0] - 0);
allPeople[personIndex].setAge(tempImport[0] - 0);
// get SSN
fin.getline(tempImport, ':');
for(int i=0;i<9;i++){
tempIntArray[i] = tempImport[i] - 0;
}
employees[employeeIndex].setSsn(tempIntArray);
allPeople[personIndex].setSsn(tempIntArray);
// get Employee ID
fin.getline(tempImport, ':');
for(int i=0;i<5;i++){
tempIntArray[i] = tempImport[i] - 0;
}
employees[employeeIndex].setEmpID(tempIntArray);
// get title
fin.getline(tempImport, ':');
employees[employeeIndex].setTitle(tempImport);
// get salary
fin >> tempDouble;
employees[employeeIndex].setSalary(tempInt);
employeeIndex++;
personIndex++;
}
【问题讨论】:
-
使用调试器单步执行程序时发生了什么?
-
请,请,请,请使用
'0'而不是48。很多人没有意识到48是字符零的ASCII码的十进制值。 -
为什么要使用
new运算符和动态内存?这是 C++,不是 Java。仅在绝对必要时使用动态内存。研究“内存泄漏 c++”以获取有关副作用的更多信息。 -
动态内存使用是项目的要求。增加我们搞砸的几率,从而从中吸取教训。
-
不是你原来的问题,但我注意到你似乎设置了两次名字,而不是设置名字然后设置姓氏。 (我猜这是一个复制粘贴错误......):)