首页 文章

C将文本文件中的数据转换为int Vector [关闭]

提问于
浏览
-1

我有一个大学的作业,我有一个包含多个值的文本文件 . 它们在不同的行上,我必须将它们存储在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
(每个等于100英镑)
商店1:
*********
商店2:*****
店铺3:************
店铺4:******
商店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

    你应该直接读取整数 .

    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);
    
    }
    

相关问题