C ++将文本文件中的数据转换为int Vector

时间:2016-12-13 10:53:07

标签: c++

我有一份来自大学的作业,我有一个包含多个值的文本文件。 它们在不同的行上,我必须将它们存储在Vector中。 我们还必须使用已经设置了ifstream,ofstream和int Vector的类,但是这些类在Class的私有部分中,我似乎无法使用它们(不允许更改类!)。 我们在via getline中获取了值,但现在需要将它们从字符串转换为int,但问题是我们不允许添加更多库。 我们被允许使用的库是:

iostream string fstream vector

任何有关转换这些内容的帮助都会非常感激!

以下是简报:

  

计划1

     

编写包含满足以下条件的类的程序   声明(即此声明应放在您的声明的顶部   cpp文件):

     

您的程序应该从名为'sales.txt'的文件中读取销售值   并将表示这些值的条形图输出到一个名为的文件中   “graph.txt”。通过显示一行来创建条形图中的每个条形图   星号。每个星号应代表100英镑的销售额。

     

例如,'sales.txt'文件包含以下值:

1000
500
1200
600
200
     

以下是程序之后'graph.txt'文件应该包含的内容   执行:

SALES BAR CHART
(each * equals £100)
Store 1: **********
Store 2: *****
Store 3: ************
Store 4: ******
Store 5: **

这是我们不允许改变的课程:

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

using namespace std;

class SalesData
{
private:
ifstream inputfile;
ofstream outputfile;
vector<int> salesrecords;
public:
void loadDataFromFile(string filename);
void saveBarChartToFile(string filename);
};

我现在已完全跳过课程并创建了新的ifstream / ofstream和向量。 输出我工作正常,我正在努力的输入!

void loadDataFromFile()
{
    ifstream inputfile;
    vector<int> salenumbers;
    int holder;

    inputfile.open("sales.txt");

    if (!inputfile.is_open())
    {
         cout << "Text Not Open Error!";
    }
    else
    {
        string line;
        vector<string> text;
        int i = 0;



        while (inputfile.good())
        {
            getline(inputfile, line);
            text[i] = line;
            i++;
        }
        for (int z = 0; z <= 5; z++)
        {
             int num = atoi(text.at(z).c_str());
             salenumbers.push_back(num);
        }



    }
    inputfile.close();

    saveBarChartToFile(salenumbers);
}

我尝试了多种方法,比如直接将它直接插入到int矢量中并且它们没有用。我找到了很多方法将字符串更改为int,但它需要更多的库。

此外,如果我可以使用该课程,那将更容易。

我打算提出一个新问题,但它不会让我把它添加到这个问题上:

我有一个函数输出到我用cout测试的文件,它在屏幕上工作得很好。现在我已将其更改为输出到文件,但文件中没有任何内容。

想知道是否有人能看到错误:

void saveBarChartToFile(vector<int>numbers)
{
    ofstream outputfile;

    outputfile.open("graph.txt", std::ios_base::app);


    if (!outputfile.is_open())
    {
        cout << "FILE NOT OPEN ERROR!";
    }
    else
    {
        for (int i = 0; i < numbers.size(); i++)
        {
            int stars = 0;
            int starAmount = numbers[i] / 100;
            outputfile << "Shop" << (i + 1) << ":";
            for (int j = 0; j < starAmount; j++)
            {
                outputfile << "*";
            }
            outputfile << "/n";
        }
        outputfile.close();
    }
}

1 个答案:

答案 0 :(得分:0)

你应该直接阅读整数。

int sale;
vector<int> salenumbers;
while (inputfile >> sale)
{
    salesnumbers.push_back(sale)
}

这应该继续读取整数并将它们保存到文件末尾。 试试这个逻辑而不是块

string line;
vector<string> text;
int i = 0;

while (inputfile.good())
{
     getline(inputfile, line);
     text[i] = line;
     i++;
}
for (int z = 0; z <= 5; z++)
{
     int num = atoi(text.at(z).c_str());
     salenumbers.push_back(num);
}

关于新的“问题”。 我可以生成文件,其内容例如在我的情况下:

Shop1:********** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ***** / nShop2:*********** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ******** / nShop3:************ ************************************ ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ******** / N

使用此测试代码:

int main(int argc, char* argv[]) {
  vector<int> sale;
  sale.push_back(40000);
  sale.push_back(50000);
  sale.push_back(60000);
  saveBarChartToFile(sale);

}