【问题标题】:How to store a text file into a vector (C++) [closed]如何将文本文件存储到向量中(C++)[关闭]
【发布时间】:2017-07-22 19:27:17
【问题描述】:

我需要帮助将文本从文本文件存储到向量中。

文本文件名为“names.txt”,包含以下数据

salman
mahmoud
ahmad
ghadeer
raghad
abdullah
faisal

下面的文字是我的代码

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

using namespace std;

int main ()
{
    vector<string> STRING;
    ifstream infile;

    infile.open ("names.txt");

    for(size_t i = 0; i < 7; i++)
    {
        getline (infile, STRING[i]);
        cout << STRING[i];
    }

    infile.close();

    return 0;
}

每次运行程序时,我都会收到以下错误消息

【问题讨论】:

  • 1) 不要将变量命名为“STRING”。按照惯例,为 C/C++ macos 保留全大写名称。 2) 阅读std::vector。特别是阅读v.push_back(line); 3) 在这种情况下,您忘记了初始化大小。 *但你不应该硬编码“7”。这违背了拥有可变长度“向量”的全部目的:(!!!!
  • 试试vector&lt;string&gt; STRING(7);

标签: c++ file vector


【解决方案1】:

你声明了你的向量,但你没有设置它的大小。

你可以:

  • 要么声明一个具有特定大小的向量
  • 或者直接使用push_back()函数如下:

.

for(size_t i = 0; i < 7; i++)
{
    string temp; // temporal variable - just a place holder
    getline (infile, temp); // get line 
    MyVector.push_back(temp); // add it to the vector (add to the end of it)
}

【讨论】:

  • 很好的回复。另一项建议:OP 应消除 for (i=0; i &lt; 7; i++) 并替换 while (getline (infile, temp) {}
【解决方案2】:

您正在尝试访问未创建的向量元素。 当你打电话时

vector<string> STRING

它创建了一个能够存储字符串但没有任何字符串的向量。 因此,当您尝试使用 STRING[i] 访问其中一个时,它表示您正在尝试访问不存在的元素。

可能的解决方案:在循环调用之前

STRING.resize(7);

它会为 7 个空字符串分配内存,然后这个循环就可以正常工作了。

【讨论】:

    【解决方案3】:

    你可以试试这个方法:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main ()
    {
        vector<string> STR;
        ifstream infile;
    
        infile.open ("names.txt");
    
        for(size_t i = 0; i < 7; i++)
        {
            string st;
            getline (infile, st);
            STR.push_back(st);
            cout << STR[i] << endl;
        }
    
        infile.close();
    
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      您的问题是您正在尝试写入一个空向量。只需更改即可轻松解决此问题:

      vector<string> STRING;
      

      到:

      vector<string> STRING(7);
      

      但是,您应该将向量的名称更改为:

      vector<string> lines;
      

      最后一件事(不太重要)是您从文件中读取了 7 行。如果文件有 4 行或 56 行怎么办?所以,这是你真正应该做的:

      #include <iostream>
      #include <fstream>
      #include <string>
      #include <vector>
      
      int main () {
      
         std::vector<std::string> lines;
         std::ifstream infile("names.txt");
      
         std::string line;
         while(std::getline(infile, line)) {
            lines.push_back(line);
            std::cout << lines.back() << std::endl;
         }
      
         return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-07
        • 2021-12-25
        • 1970-01-01
        • 2011-09-07
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多