【发布时间】:2011-10-30 21:13:23
【问题描述】:
我的 CMPT 课程的实验作业遇到了一些问题... 我正在尝试读取每行包含两个单词和一串数字的文本文件,并且该文件可以是任何人制作的长度。
一个例子是
Xiao Wang 135798642
Lucie Chan 122344566
Rich Morlan 123456789
Amir Khan 975312468
Pierre Guertin 533665789
Marie Tye 987654321
我必须让每一行都成为一个单独的“学生”,所以我正在考虑使用 struct 来做到这一点,但我不知道该怎么做,因为我需要将第一个、最后一个和 ID 号分开.
struct Student{
string firstName;
string secondName;
string idNumber;
};
所有尝试分别阅读每个单词的尝试都失败了(最终改为阅读整行),我有点沮丧。
在@Sylence 的帮助下,我设法分别阅读了每一行。不过,我仍然对如何用空格分割行感到困惑。 ifstream中是否有拆分功能?
Sylence,'parts' 会是一个数组吗?我看到你在 [] 中有索引。
students.add( stud ) 到底是做什么的?
到目前为止我的代码是:
int getFileInfo()
{
Student stdnt;
ifstream stdntFile;
string fileName;
char buffer[256];
cout<<"Please enter the filename of the file";
cin>>filename;
stdntFile.open(fileName.c_str());
while(!stdFile.eof())
{
stdFile.getLine(buffer,100);
}
return 0;
}
这是我修改后的最终版本的 getFileInfo(),感谢 Shahbaz,感谢 Shahbaz 提供了一种简单快捷的方式来读取数据。
void getFileInfo()
{
int failed=0;
ifstream fin;
string fileName;
vector<Student> students; // A place to store the list of students
Student s; // A place to store data of one student
cout<<"Please enter the filename of the student grades (ex. filename_1.txt)."<<endl;
do{
if(failed>=1)
cout<<"Please enter a correct filename."<<endl;
cin>>fileName;
fin.open(fileName.c_str());// Open the file
failed++;
}while(!fin.good());
while (fin >> s.firstName >> s.lastName >> s.stdNumber)
students.push_back(s);
fin.close();
cout<<students.max_size()<<endl<< students.size()<<endl<<students.capacity()<<endl;
return;
}
我现在很困惑的是如何访问输入的数据!我知道它被放入了一个向量中,但是如何访问向量中的各个空间,以及输入的数据到底是如何存储在向量中的?如果我尝试计算向量的一个点,我会收到一个错误,因为我猜 Visual Studio 不知道要输出什么..
【问题讨论】:
-
抱歉,txt文件的链接失效了,
-
那么您尝试过做什么?向我们展示您的努力,以便我们为您提供帮助。
-
好的.. 感谢您的快速回复。我很乐意向您展示我目前所拥有的,但我无法弄清楚如何格式化此评论框中的代码。我只是在它周围加上撇号或[代码]或其他东西吗?对不起,我的能力不够。。
-
修改您的问题。不要将代码放在 cmets 中。编辑窗口顶部有按钮。选择您的代码部分并单击代码按钮(引号)。
标签: c++ string file-io input vector