在 C++ 中从文件中查找平均工资

Posted

技术标签:

【中文标题】在 C++ 中从文件中查找平均工资【英文标题】:find average salaries from file in c++ 【发布时间】:2016-12-15 10:12:15 【问题描述】:

我需要从文件中的员工那里找到平均工资

   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;

【问题讨论】:

尝试在c++11中使用regex。它只适合您的问题。 ***.com/questions/27400131/…***.com/questions/11627440/regex-c-extract-substring 【参考方案1】:

我建议您在阅读这些行时继续添加平均值,因此您只需遍历薪水列表一次。

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】:

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

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

希望对您有所帮助!

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

std::string line;
while(std::getline(file, line))

  // tokenize to get the last item and store it

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

const string salaryText = line.substr(line.find_last_of('$') + 1);

应将提取的工资文本转换为数字并存储在vector&lt;float&gt; 中或为每一行汇总。这取决于您是否还需要在某个时候获得特定的薪水。如果您使用矢量选项,您可以这样写:

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

然后你可以计算平均工资:

const double salarySum = std::accumulate(salaryList.begin(), salaryList.end(), 0.0);
const double salaryMean = salarySum / salaryList.size();

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

【讨论】:

以上是关于在 C++ 中从文件中查找平均工资的主要内容,如果未能解决你的问题,请参考以下文章

查询各部门中高于部门平均工资的人员,人数及该部门的平均工资

Excel工资表各岗位每个月的月平均工资?

SQL - 试图让员工的平均工资高于平均部门工资

SQL数据库 计算出每个部门的平均工资 最高工资和最低工资 语法怎么写?

武汉市近年社会平均工资(职工平均工资对照表)

07-SQLSERVER聚合函数