统计电影票房排名前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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx 负载均衡时,一台tomcat宕机时的问题 自动切换

    nginx 负载均衡时,一台tomcat宕机时的问题 自动切换如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下:1.在http节点下,添加upstream节点。upstreamlinuxidc{      server10.0.6.108:7080;      server10.0.0.85:8980;}

    2022年7月23日
    14
  • NTP时间服务器搭建「建议收藏」

    1.yuminstallntpntpdate安装NTP服务器2.NTP服务器配置:修改配置文件vi/etc/ntp.conf3./etc/init.d/ntpdrestart重启服务4.ntpq-p查看状态5.date查看当前时间6.客户机同步时间ntpdatepool.ntp.org(pool.ntp.org为服务机ip地址,pool.ntp.o…

    2022年4月7日
    38
  • vue路由懒加载实现_vue路由懒加载实现原理

    vue路由懒加载实现_vue路由懒加载实现原理某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:/user/aaaa或/user/bbbb。p除了有前面的/user之外,后面还跟上了用户的ID。这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)。1、配置router2、使用路由3、创造用户组件并使用传进来的用户信息在compute中用this.$route.params.userId,但是mustache语法中直接$route.pa

    2022年10月7日
    3
  • 通过sql调用procedure_oracle存储过程简单案例

    通过sql调用procedure_oracle存储过程简单案例文章目录1.存储过程和函数在实际项目中的使用2.存储过程与函数的比较2.1.共同点2.2.不同点3.存储过程StoredProcedure3.1.存储过程概述3.1.1.存储过程的优点3.1.2.存储过程的缺点3.2.创建存储过程createprocedure3.3.调用存储过程call3.4.查看存储过程的定义3.5.修改存储过程alterprocedure…

    2022年10月5日
    2
  • 虚函数详解[通俗易懂]

    虚函数详解[通俗易懂]文章目录一、虚函数实例二、虚函数的实现(内存布局)1、无继承情况2、单继承情况(无虚函数覆盖)3、单继承情况(有虚函数覆盖)4、多重继承情况(无虚函数覆盖)5、多重继承情况(有虚函数覆盖)三、虚函数的相关问题1、构造函数为什么不能定义为虚函数2、析构函数为什么要定义为虚函数?3、如何去验证虚函数表的存在  面向对象的语言有三大特性:继承、封装、多态。虚函数作为多态的实现方式,重要性毋庸置疑。 …

    2022年7月26日
    11
  • php sql filestream,FileStream应用

    php sql filestream,FileStream应用FileStream:文件流,为了解决大对象BLOB(BinaryLargeObjects)的存储问题.对于大对象存储,并且不受2GB的限制.以往有两种方式:(1)存储在数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低;(2)存储在文件系FileStream:文件流,为了解决大对象BLOB(BinaryLargeOb…

    2022年7月24日
    6

发表回复

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

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