我有一份来自大学的作业,我有一个包含多个值的文本文件。 它们在不同的行上,我必须将它们存储在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();
}
}
答案 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);
}