c++ - 与文件中的数据进行比较时,字符串比较失败
问题描述
我正在尝试根据从文件中获得的数据计算有多少男性和女性。但是当我放置
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;
}
解决方案
当您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, ';');
}
推荐阅读
- python - 没有在哪里部署 Python Flask API 项目
- r - 绘制气泡图:单个轴上的所有路径项
- python - /profile/ 处的 AttributeError
- asynchronous - 异步 gunicorn 抛出 Cors 问题,但 Sync gunicorn 工作正常
- php - PHP Laravel save() 没有更新记录
- python - 如何在 django-models 中以特定/自定义的方式订购数据?
- android - 创建位图而不在 UI 上显示 - 小问题
- xml - xmlstarlet:删除具有特定属性值的标签及其子标签
- python-3.x - PIL 的 Image.rotate() 裁剪图像
- php - 如何在 WooCommerce 中查找任何国家/地区的州/城市