首页 > 解决方案 > 与文件中的数据进行比较时,字符串比较失败

问题描述

我正在尝试根据从文件中获得的数据计算有多少男性和女性。但是当我放置

struct pneumonia
{
string gender;
}patientInfo[3];

//inside main func

ifstream p("patient.txt");
for (int i=0;i<3;i++)
{
    getline(p,patientInfo[i].gender,';');
}

int tm=0, tf=0;
for (int i=0;i<3;i++)
{
    if (patientInfo[i].gender == "female")
        tf++;
    else
        tm++;
}
cout<<"Male :"<<tm<<"\nFemale :"<<tf<<endl;

文件中的数据包含 2 位女性和 1 位男性,但是当我运行程序时,它输出 2 位男性和 1 位女性。文件中的数据如下

女性; 玛丽亚姆·宾蒂·拉姆利;2 7

女性; Aisyah Binti Salleh; 4 3

男性; 努哈拉兹·本·阿米鲁尔;3 5

任何人都知道问题是什么?

下面的完整编码供任何感兴趣的人使用

#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

struct pneumonia
{
    string name;
    string gender;
    int age;
    int ward;
}patientInfo[3];

int main()
{
    ifstream p("patient.txt");
    for (int i=0;i<3;i++)
    {
    getline(p,patientInfo[i].gender,';');
    getline(p,patientInfo[i].name,';');
    p>>patientInfo[i].age>>patientInfo[i].ward;
    cout<<patientInfo[i].gender<<" "<<patientInfo[i].name<<" "<<patientInfo[i].age<<" "<<patientInfo[i].ward<<endl;
}
p.close();
int tm=0, tf=0,l=0;
string ln;
for (int i=0;i<3;i++)
{
    if (patientInfo[i].gender == "female")
        tf++;
    else
        tm++;
        
    if (patientInfo[i].ward>l)
    {
        l=patientInfo[i].ward;
        ln=patientInfo[i].name;
    }
}
cout<<"Male :"<<tm<<"\nFemale :"<<tf<<endl;
cout<<"Longest stay :"<<ln<<"\nDays : "<<l;

}

标签: c++stringloopsfilestruct

解决方案


当您getline在该输入上使用并使用分隔符三次时,;您最终会得到

patientInfo[] = {
    "female",
    " Mariam Binti Ramli",
    " 2 7"
};

不是你所期待的。您与“女性”的比较只成立一次。

你可以做的是:

for (int i=0; i<3; i++)
{
    string line;
    getline(p, line, '\n');
    stringstream ss(line)
    getline(ss, patientInfo[i].gender, ';');
}

推荐阅读