2016-12-13 89 views
-1

我有一份来自大学的作业,其中有一个具有多个值的文本文件。 他们在不同的线路上,我必须把它们存储在一个矢量。 我们还必须使用一个具有ifstream,ofstream和int Vector的Class,但它们都在Class的私有部分,我似乎无法使用它们(不允许更改该类!)。 我们通过getline获取了值,但现在需要将它们从字符串转换为int,但问题是我们不允许添加更多的库。 我们被允许使用的库是:C++将文本文件中的数据转换为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); 
} 

我已经尝试了多种方法,像直到eof,只是把它直接进入一个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

你能比“我似乎无法使用它们”更具体吗?从这里很难看出你的代码是什么样的。 – molbdnilo

+0

您能告诉我们提供给您的课程 – baliman

+0

您可以使用 将字符串转换为int string str =“123”; int numb; istringstream(str)>> numb; – baliman

回答

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

} 
+0

工作正常!我和一个哥们一直在我们的脑海里徘徊! 你能否解释一下这个片段对我更好一点,因为我相信我将来会再次需要这个片段! –

+0

当然!只要整个文件中存在整数就可以读取所有文件,基本上这就是“while(inputfile >> sale)”所告诉的内容。只要你阅读一个有效的整数,保存你刚刚阅读的当前一个,并将其保存在所有销售编号(“salenumbers.push_back(sale);”)的向量中,然后在文件中向前移动并查看下一个。 现在,我不确定在此之前需要额外的检查,但只要您检查了文件是否打开正确(“if(!inputfile.is_open())”),在这种简单情况下应该可以。 – fedepad

+0

我现在有另一个问题。我正在用cout测试我的输出函数,看看它是否打印出来(它是),但它似乎没有打印到文件! 这里是功能: –