在c ++中找到文件的平均工资

时间:2016-12-15 10:12:16

标签: c++ string file average

我需要找到文件员工的平均工资

   John Harris $50000.00
   Lisa Smith $75000.00
   Adam Johnson $68500.00
   Sheila Smith $150000.00
   Tristen Major $75800.00
   Yannic Lennart $58000.00
   Lorena Emil $43000.00
   Tereza Santeri $48000.00

如何获取员工的工资,以便找到平均值?我设法将文件的每一行都写成一个字符串,但我不知道如何访问每个员工的工资 我的代码是:

#include<iostream>
#include<fstream>
#include<cstring>

#include<cstdlib>
using namespace std;

int main()
{
    ifstream in;
    in.open("HW6Prob2.txt");

    if(in.fail())
    {
        cout<<"ERROR: File could not open."<<endl;
        exit(1);
    }

    string word[8];

    int i=0;
    for(i=0;i<8;i++)
    {
        getline(in,word[i]);    //get line string
        out<<word[i]<<endl;
    }
    string a=word[0];
    string b=word[1];
    string d=word[3];
    string e=word[4];
    string f=word[5];
    string g=word[6];
    string h=word[7];
    cout<<a[13]<<endl;
    string sum=
    cout<<sum<<endl;

    return 0;
}

4 个答案:

答案 0 :(得分:2)

这看起来像是一项学校作业,所以我会给你一些关于如何使用伪代码来应对挑战的提示:

sum = 0
numberOfPersons = 0
for each line in "HW6Prob2.txt"
  pos = find position of $
  salary = cut the string from pos and parse as double

  sum = sum + salary
  numberOfPersons = numberOfPersons + 1
loop

average = sum / numberOfPersons

我希望你会发现这很有用!

答案 1 :(得分:2)

我建议您在阅读行时继续添加平均值,这样您只需在工资列表中迭代一次。

int i = 0; 
float avg_salary = 0;
string line;
// get the sum while you read the lines
while(getline(in, line)) {
    // find the first salary digit position (just after the $ sign)
    int salaryStartPos = line.find('$') + 1;
    // Convert the salary string to a float with the atof method
    avg_salary += atof(line.substr(salaryStartPos, line.size()-1)
    ++i;
}
// Finally calculate the average
avg_salary = avg_salary / i;

答案 2 :(得分:0)

您可以使用stof函数从字符串中获取浮点值。你需要的只是找出浮点的起点。在您的情况下,您可以使用position of $ + 1作为起点。使用find功能。

答案 3 :(得分:0)

首先,你应该遍历文件行(直到结束)来读取所有数据:

-- Table: public.categories

-- DROP TABLE public.categories;

CREATE TABLE public.categories
(
    categoryid bigint NOT NULL,
    functions character varying(255) COLLATE pg_catalog."default" NOT NULL,
    name character varying(255) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT categories_pkey PRIMARY KEY (categoryid)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.categories
    OWNER to postgres;

如果您的文件结构严格定义为:[first_name] [last_name] $ [salary],您可以阅读每个工资条目,如:

std::string line;
while(std::getline(file, line))
{
  // tokenize to get the last item and store it
}

提取的工资文本应转换为数字,并存储在const string salaryText = line.substr(line.find_last_of('$') + 1); 或汇总每行。这取决于您是否还需要在某些时候访问特定工资。如果您使用矢量选项,您可以编写类似:

的smth
vector<float>

之后你可以用以下方法计算平均工资:

salaryList.push_back(std::stof(salaryText));

拥有工资清单的好处是,您可以进一步计算其他统计数据,而不仅仅是平均值。