我正在开展一个项目,我必须实现一个异构的队列和堆栈列表。我实现了这个列表,但是当我尝试将信息放入其中时,某些事情就出错了。我必须从文件中读取信息并将此信息放入列表中;该列表由n个容器组成。文件中的每一行(类似于stack 1 2 4 5
)都是异构列表中的容器,其中第一个字符串显示容器是堆栈还是队列。我尝试读取信息并将其放在列表中,但它只读取第一行。
这是我的代码:
void write_in_txt(int n){
ofstream foo("conteiners.txt");
string type;
for(int i=0;i<n;i++){
cin>>type;
foo << type;
int num = 1;
while(num != 0){
cin>>num;
if(num!=0){
foo<<" ";
foo<<num; }
}
foo << endl;
}
}
void read_and_make(int n,QueueStackList& qsl){
ifstream data("conteiners.txt");
string tmp;
LinkedListIterator<Object<int>*> it;
for(int i=0;i<n;i++){
if(i == 0){
int temp;
data >> tmp;
if(tmp.compare("stack")){
qsl.insertEnd(new StackObject<int>);
it = qsl.begin();
while(data >> temp){
(*it)->insert(temp);
}
}
else
{
qsl.insertEnd(new QueueObject<int>);
it = qsl.begin();
while(data >> temp){
(*it)->insert(temp);
}
}
}
else {
int temp;
data >> tmp;
if(tmp.compare("stack")){
qsl.insertEnd(new StackObject<int>);
it++;
while(data >> temp){
(*it)->insert(temp);
}
}
else
{
qsl.insertEnd(new QueueObject<int>);
it++;
while(data >> temp){
(*it)->insert(temp);
}
}
}
}
}
containers.txt:
stack 4 7 4 7 7
stack 9 8 7 4
queue 1 2 5 3
stack 8 7 7 7
和主要功能:
int main(){
QueueStackList qsl;
//write_in_txt(4);
read_and_make(4, qsl);
cout << qsl <<endl; ///prints only 4 7 4 7 7
return 0;
}
答案 0 :(得分:0)
问题在于:
while(data >> temp){
...
}
此操作不会在行尾停止,而是继续到下一行并尝试将“堆栈”读入整数变量,该变量将data
放入{ {1}}州。
有几种方法可以解决这个问题。您可以更改fail
的格式,并添加一个前导数字,表示该行中有多少个数字。或者您可以使用containers.txt
读取整行,然后解析它(“手动”或使用stringstream)。或者您可以尝试清除getline
状态,恢复单词“stack”并继续(我不知道该怎么做)。