【问题标题】:Adding words from a text file to a vector c++将文本文件中的单词添加到向量 c++
【发布时间】:2019-04-28 16:12:12
【问题描述】:

我正在尝试将文件中的每个单词添加到向量中,但是如果我将向量的大小设置为 (500) 并且文件中只有 20 个单词。向量的大小仍然被认为是 500。我该如何解决这个问题?

我这样做是不是不好?这可以更简单吗?

void loadFile(string fileName)
{
    vector<string> fileContents(500);
    int p = 0;
    ifstream file;
    file.open(fileName);
    if (!file.is_open()) return;

    string word;
    while (file >> word)
    {
        fileContents[p] = word;
        p++;
    }

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

【问题讨论】:

  • 您应该使用fileContents.push_back(word); 而不是fileContents[p] = word; 也将vector&lt;string&gt; fileContents(500); 更改为vector&lt;string&gt; fileContents; 并摆脱p
  • @drescherjm 我试过了,但是当它打印出文件内容时,它什么也没打印出来?编辑:NVM。我输入了错误的命令..有效..我以为我试过了,但我想我一开始就输入错了
  • @jake 你摆脱了(500)吗?
  • 现在可以使用了。我想我上次尝试时可能已经离开了,也许这就是它不起作用的原因。 @0x499602D2

标签: c++ list c++11 vector


【解决方案1】:

您还可以使用更直接的方法,立即从输入流中复制。

std::vector<std::string> loadFile(std::string fileName) {
    std::ifstream file(fileName);
    assert(file);

    std::vector<std::string> fileContents;
    std::copy(std::istream_iterator<std::string>(file), 
              std::istream_iterator<std::string>(), 
              std::back_inserter(fileContents));

    return fileContents;
}

【讨论】:

    【解决方案2】:

    cmets 中的@drescherjm 给了我正确的答案。

    void loadFile(string fileName)
    {
        vector<string> fileContents;
        ifstream file;
        file.open(fileName);
        if (!file.is_open()) return;
    
        string word;
        while (file >> word)
        {
            fileContents.push_back(word);
        }
    
        for (int i = 0; i < fileContents.size(); i++)
        {
            cout << fileContents[i] << endl;
        }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2012-11-03
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      相关资源
      最近更新 更多