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


相关推荐

  • 安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?[通俗易懂]

    安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?[通俗易懂]时常会有初学者来问,手机是否可以安装PLC编程软件?在这里明确的告诉大家,手机不可以安装PLC编程软件。手机不支持安装PLC编程软件,因为PLC编程软件是你所用的品牌厂家开发出来的,如三菱PLC、西门子PLC、欧姆龙PLC等,厂家开发出软件并上线,供我们下载安装,我们才有的用,目前没有任何厂家有开发手机版的PLC编程软件。其实想用手机版的PLC编程软件,就目前来看,非常的不现实,存在一些问题,如安…

    2022年5月10日
    88
  • Web 前端开发学习资料整理

    以前学习过一段时间的web前端开发,整理了一些我看过的/我认为比较好的学习资料(网站、书籍)。我只是闲来无事整理一下,如有不足,嘴下留情..毕竟分享不是一件坏事,共同学习…一、语言基础(以书和网站为主)1.HTML&CSS:(1)入门:Codeademy上的html&css课程——在线交互式编程平台,弄清楚基本概念和基本语法w3school上的HTML/CSS教程——

    2022年4月16日
    54
  • 用ASP实现简单的繁简转换

    用ASP实现简单的繁简转换

    2021年11月15日
    61
  • c语言中图书管理系统_c语言图书管理系统排序

    c语言中图书管理系统_c语言图书管理系统排序课件C语言图书管理系统代码#include#include#includestructbook{intnum;charbname[50];charwname[20];charpress[50];charsort[50];inttime;floatprice;structbook*next;};structbook*creatbook();…

    2022年8月31日
    5
  • 笔记《Thinking in Java》第2章 一切都是对象[通俗易懂]

    笔记《Thinking in Java》第2章 一切都是对象[通俗易懂]第二章一切都是对象1.数据可以存在哪寄存器。因为它在CPU内部,所以最快。但是Java无法直接控制它。栈。在RAM上,但是,CPU可以通过栈指针快速的分配存储,向下就分配新内存,向上就释放内存,所以速度很快。代价是,Java系统必须确切的知道数据在栈里的生命周期,所以灵活性有限。Java的对象引用存在这。堆。也是在RAM上,不过跟栈比,编译器不用知道数据在堆里的生命周期,所以在堆里分配…

    2022年7月8日
    22
  • 主流流媒体服务器介绍

    主流流媒体服务器介绍1)FMS(Flashmediaserver)简介 FMS是一个完全基于软件环境的多媒体实时通讯环境,代表了当前实时通讯领域内的发展的方向,并且,其自身也融合了大量的新特色,用于创建下一代通讯应用程序  简而言之,Adobe的FMS是一个多媒体应用平台,在这个平台上,可以实现多媒体流的点播、直播、交互等多种应用,由于Adobe公司在网络多媒体应用上的雄厚实力,以及AdobeFla

    2022年5月6日
    45

发表回复

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

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