统计电影票房排名前10的电影并存入还有一个文件

统计电影票房排名前10的电影并存入还有一个文件

大家好,又见面了,我是全栈君。

今天看到一个笔试题,是这种:给定一个文件(m.dat)。里面保存了各个电影票房统计。格式例如以下:

《2012》                                索尼                $769.7
《哈利波特与死亡圣器(上)》              华纳兄弟            $952.0
《星球大战》                            二十世纪福克斯      $775.4
《怪物史莱克4》                         派拉蒙/梦工厂       $750.0
《阿凡达》                              二十世纪福克斯      $2,782.2
《哈利波特与火焰杯》                    华纳兄弟            $895.9
《哈利波特与混血王子》                  华纳兄弟            $934.0
《指环王2:双塔奇兵》                   新线                $925.3
《蝙蝠侠前传2:黑暗骑士》               华纳兄弟            $1,001.9
《哈利波特与魔法石》                    华纳兄弟            $974.7
《海底总动员》                          迪士尼              $867.9
《功夫熊猫》                            派拉蒙/梦工厂       $631.7
《加勒比海盗3:世界的尽头》             迪士尼              $961.0
《哈利波特与阿兹卡班的囚徒》            华纳兄弟            $795.6
《E.T.》                                环球                $792.9
《夺宝奇兵4:水晶骷髅王国》             派拉蒙              $786.6
《指环王3:王者归来》                   新线                $1,119.1
《怪物史莱克2》                         梦工厂              $919.8
《玩具总动员3》                         迪士尼              $1,063.2
《黑客帝国2:重装上阵》                 华纳兄弟            $742.1

。。。。。

。。


要求敲代码统计票房排名前10的电影。并把统计结果存入还有一个文件。自己试着用C++实现一下,代码分享例如以下:(linux下gcc 编译)

gcc编译,运行时要传入两个命令行參数,比方:./a.out   m.dat   li.dat (m.dat为源票房文件。li.dat 为存放前10的文件)

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
class Movie {
public:
	//重载输入操作
	friend istream& operator>> (istream& is,
		Movie& movie) {
		return is >> movie.m_title >> movie.m_comp
			>> movie.m_gross;
	}
	//重载输出操作
	friend ostream& operator<< (ostream& os,
		const Movie& movie) {
		return os << movie.m_title << ' '
			<< movie.m_comp << ' ' << movie.m_gross;
	}
	//重载小于号,用于List排序
	bool operator< (const Movie& movie) const {
		return gross () > movie.gross ();
	}
private:
	//把从文件读取的string转换为double返回
	double gross (void) const {
		string str (m_gross);
		size_t pos = 0;
		while ((pos = str.find_first_of ("$,", pos)) !=  //去除票房前面的"$"和","
			string::npos)
			str.erase (pos, 1);
		return atof (str.c_str ());
	}
	string m_title;  //电影名
	string m_comp;	 //出品公司名
	string m_gross;  //票房
};
//读文件,读取结果存入Vector<Movie>& vm
bool read (const char* file, vector<Movie>& vm) {
	ifstream ifs (file);
	if (! ifs) {
		perror ("打开票房文件失败");
		return false;
	}
	Movie movie;
	while (ifs >> movie)  //调用重载的>>操作符
		vm.push_back (movie);
	ifs.close ();
	return true;
}
//写文件,把vector<Movie>& vm中数据写入文件
bool write (const char* file, const vector<Movie>& vm){
	ofstream ofs (file);
	if (! ofs) {
		perror ("打开排行文件失败");
		return false;
	}
	for (vector<Movie>::const_iterator it = vm.begin();
		it != vm.end (); ++it)
		ofs << *it << endl;  //调用重载的<<操作符
	ofs.close ();
	return true;
}
int main (int argc, char* argv[]) {
	//推断命令行參数个数是否合法
	if (argc < 3) {
		cerr << "使用方法:" << argv[0]
			<< " <票房文件> <排行文件>" << endl;
		return -1;
	}
	vector<Movie> vm;
	if (! read (argv[1], vm))
		return -1;
	sort (vm.begin (), vm.end ());  //对vm中元素排序
	if (vm.size () > 10)
		vm.resize (10);  //取排序前10个
	if (! write (argv[2], vm))
		return -1;
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116208.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webdriver.Firefox_web driver

    webdriver.Firefox_web driver1、下载geckodriver(是Firefox的官方webdriver)地址:https://github.com/mozilla/geckodriver/releases2、下载需要的driver后,解压,将geckodriver.exe放置在与python3.exe相同的路径下。demo调试一下:火狐浏览器可以正常执行脚本,pass!…

    2022年9月19日
    0
  • ttl低电平接大电阻_3.4 TTL门电路

    ttl低电平接大电阻_3.4 TTL门电路3.4TTL门电路1.双极性三极管的开关特性(静态)图1在数字电路中,三极管作为开关元件,主要工作在饱和和截止两种开关状态,放大区只是极短暂的过渡状态。2.三极管的开关时间(动态特性)图2(1)开启时间ton:三极管从截止到饱和所需的时间。ton=td+trtd:延迟时间tr:上升时间(2)关闭时间toff:三极管从饱和到截止所需的时间。toff=ts+tf…

    2022年10月30日
    0
  • matlab极性电容叫什么,什么是无极性电容[通俗易懂]

    描述无极电容就是没有极性电源正负极的电容器,无极性电容器的两个电极可以在电路中随意的接入。因为这款电容不存在漏电的现象,主要应用在耦合,退耦,反馈,补偿,振荡等电路中。图为无极性电容参考图。无极电容就是没有极性电源正负极的电容器,无极性电容器的两个电极可以在电路中随意的接入。因为这款电容不存在漏电的现象,主要应用在耦合,退耦,反馈,补偿,振荡等电路中。无极性电容两电极无正负极性之分,主要用于交流电…

    2022年4月12日
    49
  • html css制作404页面,一款纯css3实现的漂亮的404页面

    html css制作404页面,一款纯css3实现的漂亮的404页面实现的代码。html代码:404ERRORLost?MaybeIcanhelp.required/>SearchMySuggestions.HomePortfoliocss3代码:body{background-color:#0A7189;color:#fff;font:100%”Lato”,sans-serif;font-size:1.8r…

    2022年7月27日
    1
  • Linux系统平均负载3个数字的含义

    Linux系统平均负载3个数字的含义熟悉Linux系统的人都知道负载这个说法。负载就是指当前系统的资源使用情况。可以使用w,uptime和top命令实时查看监控系统的监控状况。越来越多人开始接触Linux操作系统,从VPS到无线路由的刷机系统(如OpenWRT、Tomato),同时也必不可少地会在各式各样的探针和系统监测界面上看到”系统平均负载”或者”LoadAverage…

    2022年9月12日
    0
  • databus 支持oracle么,Databus[通俗易懂]

    databus 支持oracle么,Databus[通俗易懂]系统如果要应付大规模的请求,一条必经之路就是数据库的分割,单服务器的性能早晚都会成为负载的短板。而数据库分割,通常有Master/Salve或者集群Cluster的方式,这些方式通常都是基于同种类型的数据。对于一个庞大的多类型数据库的系统,在不同的数据库之间(甚至是不同地理位置的机房间)保持数据的同步,需要更复杂的解决方案。LinkedIn良心开源了内部的一个项目Databus,正是解决这个问题的…

    2022年10月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号