繁体   English   中英

在C ++中读取ifstream文件

[英]reading in ifstream file in C++

我有一种方法,应该读入一个名为“ Fruitdictionary.txt”的文件,然后打印出内容(字符串列表)...但是,它却打印出“ 0x7fff5fbff838”。

这是代码:

void Words::readdictionary(){
    ifstream file_ptr1;
    file_ptr1.open("fruitdictionary.txt", ifstream::in);
    string temp;
    while (file_ptr1>>temp){
        dictionarylist.push_back(temp);
        if (dictionarylist.size() == dictionarylist.capacity()) {
            dictionarylist.resize(dictionarylist.capacity()+1);
        }
    }
    cout << &dictionarylist << endl;
};

&dictionarylist采用列表的地址, 打印。

而是做类似的事情

std::copy(dictionarylist.begin(), dictionarylist.end(), 
      std::ostream_iterator<std::string>(std::cout, "\n"));

或循环

for (std::string const& s: dictionarylist)
    std::cout << s << "\n";

PS:无需调整列表大小(假设使用了 std::liststd::deque std::vector等)。 标准库容器自己进行内存管理,而push_back将根据需要增加分配的内存。

稍微清理一下:

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <string>

struct Words {
    void readdictionary();
    void printdictionary();
  private:
    std::vector<std::string> dictionarylist;
};

void Words::readdictionary(){
    using namespace std;

    ifstream file("fruitdictionary.txt");
    dictionarylist.insert(
            dictionarylist.end(),
            istream_iterator<string>(file), {}
        );
}

void Words::printdictionary(){
    using namespace std;

    copy(begin(dictionarylist), end(dictionarylist), 
            ostream_iterator<string>(cout, "\n"));
}

int main()
{
    Words words;
    words.readdictionary();
    words.printdictionary();
}

我假设dictionarylist是向量,您不能像在C ++中那样打印向量。 你可以这样打印

for(int i = 0; i < dictionarylist.size(); ++i) {
    cout << dictionarylist[i] << endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM