我有一个包含前 1000 个婴儿名字的文件。我想询问用户一个名字...搜索文件...并告诉用户该名字对于男孩名字的排名以及女孩名字的排名。如果它不是男孩名字或女孩名字,它会告诉用户它不属于该性别的流行名字。
该文件的布局如下:
Rank Boy-Names Girl-Names
1 Jacob Emily
2 Michael Emma
.
.
.
输入所需的输出Michael
将会:
迈克尔是男孩名字中第二受欢迎的名字。
如果迈克尔不是女孩的名字,则应该说:
迈克尔并不是最受欢迎的女孩名字之一
但如果是的话,它会说:
迈克尔是(排名)女孩名字之一
到目前为止我的代码如下..我似乎无法弄清楚。谢谢你的帮助。
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
using namespace std;
void find_name(string name);
int main(int argc, char **argv)
{
string name;
cout << "Please enter a baby name to search for:\n";
cin >> name;
/*while(!(cin>>name))
{
cout << "Please enter a baby name to search for:\n";
cin >> name;
}*/
find_name(name);
cin.get();
cin.get();
return 0;
}
void find_name(string name)
{
ifstream input;
int line = 0;
string line1 = " ";
int rank;
string boy_name = "";
string girl_name = "";
input.open("/<path>/babynames2004.rtf");
if (!input)
{
cout << "Unable to open file\n";
exit(1);
}
while(input.good())
{
while(getline(input,line1))
{
input >> rank >> boy_name >> girl_name;
if (boy_name == name)
{
cout << name << " is ranked " << rank << " among boy names\n";
}
else
{
cout << name << " is not among the popular boy names\n";
}
if (girl_name == name)
{
cout << name << " is ranked " << rank << " among girl names\n";
}
else
{
cout << name << " is not among the popular girl names\n";
}
}
}
input.close();
}
在你扫描完列表之前,你就已经承认失败了(“X 不在流行的 Y 名字之列”)。一个很好的简单方法(如果不是最有效的话)是在宣布没有匹配项之前记住排名直到列表末尾。像这样的事情:
bool boyrank = false, girlrank = false;
while(getline(input,line1))
{
input >> rank >> boy_name >> girl_name;
if (boy_name == name)
{
cout << name << " is ranked " << rank << " among boy names\n";
boyrank = true;
}
if (girl_name == name)
{
cout << name << " is ranked " << rank << " among girl names\n";
girlrank = true;
}
}
if(boyrank == false)
{
cout << name << " is not among the popular boy names\n";
}
if(girlrank == false)
{
cout << name << " is not among the popular girl names\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)