我正在开发一个程序,要求我读取文本文件并将数据插入到链表中。我很难将数据读入代码编译的链表中,但输出中没有任何内容。任何帮助或建议将不胜感激。
文本文件格式如下:string int int int int int int int int int int
A 83 140 228 286 426 612 486 577 836 0 0 Aaliyah 0 0 0 0 0 0 0 0 0 380 215
Aaron 193 208 218 274 279 232 132 36 32 31 41
Abbey 0 0 0 0 0 0 0 0 537 451 428
使用内部数据结构的链表。
linked_list<NameSurferEntry> database;
这是我用来解析文件中每一行的函数。
NameSurferEntry::NameSurferEntry(string line){
vector<string> filelines;
stringstream inputstringstream;
year.push_back(1900);
year.push_back(1910);
year.push_back(1920);
year.push_back(1930);
year.push_back(1940);
year.push_back(1950);
year.push_back(1960);
year.push_back(1970);
year.push_back(1980);
year.push_back(1990);
year.push_back(2000);
year.push_back(2010);
while(getline(inputstringstream, line,' ')){
filelines.push_back(line);
}
for(unsigned int i=1; i < filelines.size(); i++){
cout << year.at(i-1) << " " << filelines.at(0 + 1) << "\n";
}
cout << " " << endl;
}
string NameSurferEntry::getName(){
return name;
}
int NameSurferEntry::getRank(int decade){
return year.at(decade);
}
这是我用来读取文本文件的函数。
NameSurferDataBase::NameSurferDataBase(string filename){
ifstream input;
input.open(filename);
if(!input.is_open()){
cout << "Not Open";
}else{
string temp;
while(!input.eof()){
getline(input,temp);
if(!input.eof()){
NameSurferEntry entry(temp);
database.InsertInOrder(entry);
}
}
}
}
Inser in Order:
template <class NODETYPE>
bool linked_list<NODETYPE>::InsertInOrder(NODETYPE value)
{
if (IsEmpty()) {
// A variable used to point to data that is being inserted.
ListNode<NODETYPE> *temp = new ListNode<NODETYPE>;
if (temp == NULL) return false;
temp->data = value;
first = last = current = temp;
last->next = NULL;
}
else if (value >= last->data) {
return InsertRear(value);
}
else if (first->data >= value) {
return InsertFront(value);
}
else {
// A variable used to point to data that is being inserted.
ListNode<NODETYPE> *temp = new ListNode<NODETYPE>;
if (temp == NULL) return false;
temp->data = value;
current = first;
while (current->next->data < temp->data) {
current = current->next;
}
temp->next = current->next;
current->next = temp;
return true;
}
return false;
}
答案 0 :(得分:0)
请查看您提供的以下代码:
在NameSurferDatabase中:
while(!input.eof()){
getline(input,temp);
if(!input.eof()){
NameSurferEntry entry(temp);
database.InsertInOrder(entry);
}
您正在从文件中正确读取1行并将其放入名为“temp”的字符串中。然后,您将“temp”字符串传递给NameSurferEntry。您现在期望使用此方法来剖析“temp”字符串。
但是,在NameSurferEntry中,您输入了以下内容:
stringstream inputstringstream;
while(getline(inputstringstream, line,' ')){
filelines.push_back(line);
}
您正在声明一个字符串流,默认为空。然后你做了一个while循环来做getline(inputstringstream,line,''),它将从inputstringstream获取1行并将其变为“line”。这将无变量替换变量“line”的内容。
以下是修复方法:
stringstream inputstringstream;
inputstringstream >> line;
string temp;
while(inputstringstream << temp){
filelines.push_back(temp);
}