从文件中读取并放入容器c ++

时间:2016-01-18 19:53:15

标签: c++

我正在开展一个项目,我必须实现一个异构的队列和堆栈列表。我实现了这个列表,但是当我尝试将信息放入其中时,某些事情就出错了。我必须从文件中读取信息并将此信息放入列表中;该列表由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;
}

1 个答案:

答案 0 :(得分:0)

问题在于:

while(data >> temp){
  ...
}

此操作不会在行尾停止,而是继续到下一行并尝试将“堆栈”读入整数变量,该变量将data放入{ {1}}州。

有几种方法可以解决这个问题。您可以更改fail的格式,并添加一个前导数字,表示该行中有多少个数字。或者您可以使用containers.txt读取整行,然后解析它(“手动”或使用stringstream)。或者您可以尝试清除getline状态,恢复单词“stack”并继续(我不知道该怎么做)。