统计电影票房排名前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;
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 继续安利两个漫画App

    继续安利两个漫画App之前安利了很多漫画App~今天继续,以防被用o(>ω<)o玄猫漫画飒漫画回复“1051”下载玄猫漫画+飒漫画回复666给Yama买一块大白兔…

  • 数据结构图书管理系统课程设计_数据结构用链表建立图书管理系统

    数据结构图书管理系统课程设计_数据结构用链表建立图书管理系统《图书信息管理系统》的制作:例:全部代码如下(各部分已注释):#include “pch.h”#include<string>#include<fstream>#include <iomanip>#include <iostream>using namespace std;#define MAXSIZE 100struct…

  • iOS的高德地图标注特定位置

    iOS的高德地图标注特定位置在开发时有时候遇到项目里面需要展示公司的位置,这时如果导入百度地图什么的就太浪费资源,而且还占内存这时只要调用自动高德地图的就行了自己写一个控制器,导入框架现在导入系统框架只要多打次就能出来了,没必要去link添加1#import”MapViewCtl.h”2#import<CoreLocation/CoreLocation.h>3#impo…

  • idea 2021.3.7激活 3月最新注册码

    idea 2021.3.7激活 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • idea修改快捷键方法总结

    前言:使用idea也有一短时间了(算算也快2个月),在快捷键方面常用的基本上都熟悉了,现在有时间总结一下修改快捷键的方法,这对于idea老鸟来说简直是小菜,但是对于菜鸟来还是有些帮助的一:切换快捷键注意:idea内置的许多IDE的快捷键,假如你是从其他IDE转过来的,但是有不想放弃自己以前已经习惯的那套快捷键。那么你可以直接切换到你以前IDE的快捷键,方法如下:1.打开设置中心:file–>Se

  • weakHashMap 用法

    weakHashMap 用法WeakHashMap,此种Map的特点是:当除了自身有对key的引用外,此key没有其他引用,那么GC之后此map会自动丢弃此值举例来说:声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMapremove掉a并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于a对象…

发表回复

您的电子邮箱地址不会被公开。

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