求解下面这道C++程序题 20

解析电影文件movies2017.txt电影文件movies2017.txt包含了2017年电影票房的排行榜,首行是属性名。设计类CMovie包含私有成员unsigned... 解析电影文件movies2017.txt
电影文件movies2017.txt包含了2017年电影票房的排行榜,首行是属性名。
设计类CMovie包含私有成员unsigned int m_rank,m_boxOffice,m_ticket,m_num;
string m_name, m_type, m_country, m_date; 这些成员变量分别对应movies2017.txt中的电影的属性。
设计函数
void parseMovieFile(ifstream& inf,CMovie movies[],int &n);
该函数从电影文件中解析每个电影的各个属性,并封装成CMovie对象,存入对象数组movies[],并统计对象的个数n,返回给调用函数。
写完整的程序使得以下main()中能够正确输出各个电影的信息。
int main()
{
ifstream infile("movies2017.txt");
if(!infile) return -1;
CMovie movies[30];
int n;
parseMovieFile(infile,movies,n);
for(int i=0;i<n;i++)
movies[i].Print();
infile.close();
return 0;
}
文件大概是这样
展开
 我来答
万永泰
2018-05-10 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:107
采纳率:100%
帮助的人:44.6万
展开全部

难得不是类的设计,是怎么把文件中的数据放进去

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
class CMovie
{
public:
    CMovie()
    {
    }

    void Print(){
        cout << rank << '\t'
            << name << '\t'
            << type << '\t'
            << total << '\t'
            << price << '\t'
            << num << '\t'
            << country << '\t'
            << date << '\t'
            << endl;
    }
    void setRank(char *str){
        rank = str;
    }
    
    void setName(char *str){
        name = str;
    }
    void setType(char *str){
        type = str;
    }
    void setTotal(char *str){
        total = str;
    }
    void setPrice(char *str){
        price = str;
    }
    void setNum(char *str){
        num = str;
    }
    
    void setCountry(char *str){
        country = str;
    }
    void setDate(char *str){
        date = str;
    }
    
private:
    string rank;
    string name;
    string type;
    string total;
    string price;
    string num;
    string country;
    string date;
};
void parseMovieFile(ifstream &in, CMovie *movie, int &n)
{
    n = 0;
    char buffer[256];
    char str[20];
    while(!in.eof())
    {
        memset(buffer, 0, 256);
        in.getline(buffer, 256);
        
        int i = 0;
        int j = 0;
        int k = 0;
        while(1)
        {
            if(buffer[i] == '\0'){
                cout << str << endl;
                movie[n].setDate(str);
                memset(str, 0, 20);
                break;
            }
            
            if((buffer[i] == '.') || (j == 0 && buffer[i] == '\t')){
                i++;
                continue;
            }
            
            if(buffer[i] == '\t') {
                str[j] = '\0';
                j = 0;
                
                cout << str << endl;
                switch(k)
                {
                case 0:
                    movie[n].setRank(str);
                    break;
                case 1:
                    movie[n].setName(str);
                    break;
                case 2:
                    movie[n].setType(str);
                    break;
                case 3:
                    movie[n].setTotal(str);
                    break;
                case 4:
                    movie[n].setPrice(str);
                    break;
                case 5:
                    movie[n].setNum(str);
                    break;
                case 6:
                    movie[n].setCountry(str);
                    break;
                   default:
                    break;
            }
            k++;
            memset(str, 0, 20);
            continue;
        }
        str[j] = buffer[i];
        i++;
        j++;
    }
    
    n++;
    }
}
int main(int argc, char *argv[])
{
    ifstream infile("movies2017.txt");
    if(!infile) return -1;
    CMovie movies[30];
    int n;
    parseMovieFile(infile,movies,n);
    for(int i=0;i<n;i++)
        movies[i].Print();
    
    infile.close();
    return 0;
}
匿名用户
2018-05-10
展开全部
你得是管二的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式