【问题标题】:C++ read from file into a vectorC++ 从文件读入向量
【发布时间】:2015-02-12 23:21:23
【问题描述】:

我正在开发一个程序,该程序应该从文件中读取并将该文件的内容存储在向量中。我必须读取 .txt 文件的内容并将字符串推回向量中,然后才能到达“”。如果它是一个空格,您将跳过文件的该部分并继续在空格后面推回内容。有谁知道使用什么函数从文件中读取并将内容放入向量或数组中?谢谢你的时间。

int main()
{
    Code mess;
    ifstream inFile;
    inFile.open("message1.txt");
    if (inFile.fail()) {
        cerr << "Could not find file" << endl;
    }
    vector<string> code;
    string S;
    while (inFile.good()) {
        code.push_back(S);
    }
    cout << mess.decode(code) << endl;
return 0; 
}

【问题讨论】:

  • 您将需要使用 fopen、fgets、fclose。请务必在您提出下一个问题之前发布您的代码。
  • 将问题分解为多个部分,不用担心存储在向量或数组中,只需读取文件并输出字符串即可。提示:使用 cin 或 fgets(如 Mike 所说)
  • while (inFile.good()) 应该是 while(inFile &gt;&gt; s),这样就可以了。
  • 请搜索 StackOverflow 以获取将文件读入数组的示例:Examples of reading into vector

标签: c++ oop vector


【解决方案1】:

基本上你也可以这样做:

std::ifstream fh("text.txt");
    std::vector<std::string> vs;
    std::string s;
    while(fh>>s){
             vs.push_back(s);
    }

    for(int i=0; i<vs.size(); i++){

            std::cout<<vs[i]<<std::endl;
    }

【讨论】:

    【解决方案2】:

    你应该把你的阅读代码改为

    while (inFile >> S) {
        code.push_back(S);
    }
    

    您当前的代码不会将任何内容读入您的 S 变量。


    关于循环条件while (inFile.good())请参阅此问答:
    Why is iostream::eof inside a loop condition considered wrong?

    使用std::iostream::good() 有或多或少相同的问题。

    【讨论】:

    • 感谢您帮助解决了我的问题。我只是想知道 inFile >> S 和 inFile.good() 之间的区别是什么。
    • @MbusiHlatshwayo inFile.good() 只是检查流的状态,但不会从中读取任何内容,而 inFile &gt;&gt; S 会。后一条语句还返回对流的引用,并且由于std::istream::operator bool 提供的隐式布尔转换而检查状态。
    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多