设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1877|回复: 2
打印 上一主题 下一主题

如何实现下面的程序

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:50:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 用面向对象语言实现:
(1)类Dictionary:从文件dictionary.txt 中读入给定的英文单词并保存在其数据成员中;dictionary.txt 中每行有多个单词,用“;”加以分隔,每个单词最多16个字符;单词不跨行,因此每行的长度可能不一样,最多为n 个字符;该文件最多有m 行,实际行数可以不等于m;n 和m 均在产生Dictionary 的实例时由调用方给出;Dictionary 对外提供成员函数boolean search(String w),使得w 在这些单词中时返回true,否则返回false。
(2)一段测试程序:从命令行给出n 和m;产生Dictionary 的一个实例dic;从键盘读入单词word;输出dic.search(word) 的结果。(选做:改从指定文件中读入多个单词,分别输出相应的search 结果)

刚刚接触编程没几天啊,可是老师竟然催着交作业,在规定的时间不交就没有成绩了,可是现在一点思路都没有啊!!高手帮帮忙吧!!
2#
发表于 2009-11-4 00:50:24 | 只看该作者
Dictionary.h

#ifndef H_DICTIONARY
#define H_DICTIONARY

#include <string>
#include <set>
#include <fstream>
#include <algorithm>

#define FILTER ";"//用于分隔单词的字符,可以更改,比如添加空格"; "

class Dictionary
{
public:
    Dictionary(){};

    //直接从词典文件构造
    explicit Dictionary(const std::string& filename,const std::string& filter=FILTER)
    {
        readfile(filename,filter);
    }
   
    //读取词典文件
    void read(const std::string& filename,const std::string& filter=FILTER)
    {
        dict.empty();
        readfile(filename,filter);
    }

    bool search(const std::string& word);

private:
    void readfile(const std::string& filename,const std::string& filter);//由于read和构造函数内容相近,提取出来作为一个单独的函数供其调用

private:
    std::set<std::string> dict;//使用set确保没有重复的单词
};

bool Dictionary::search(const std::string& word)//使用标准库find算法查找
{
    return (std::find(dict.begin(),dict.end(),word)!=dict.end());
}

void Dictionary::readfile(const std::string& filename,const std::string& filter)
{

    std::ifstream file(filename.c_str(),std::ios::out);

    //打开文件失败,退出
    if(!file)
    {
        std::cerr<<"Can't read dictionary from "<<filename<<std::endl;
        exit(-1);
    }

    std::string line;
    while(std::getline(file,line))//读取一行
    {
        std::string::size_type pos=0;
        std::string::size_type pre_pos=pos;

        std::string word;

        //查找分隔符,以界定单词
        while((pos=line.find_first_of(filter,pos))!=std::string::npos)
        {
            word=line.substr(pre_pos,pos-pre_pos);
            if(word.size())
                dict.insert(word);
            pre_pos=++pos;
        }

        //处理行末单词之后没有分隔符的情况
        word=line.substr(pre_pos,std::string::npos);
        if(word.size())
            dict.insert(word);
    }
}


#endif

main.cpp


#include <iostream>
#include "dictionary.h"

int main(int argc, char* argv[])
{
    std::string filename;
    std::cout<<"Please input the dictionary file name:";
    std::cin>>filename;

    //直接从文件生成词典
    Dictionary dic(filename);

    std::string word;
    std::cout<<"Please input the word to be searched:";
    std::cin>>word;

    if(dic.search(word))
    {
        std::cout<<'\"'<<word<<"\" have been found in the dictionary.\n";
    }
    else
    {
        std::cout<<"Can't find the word in the dictionary.\n";
    }

    return 0;
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 00:50:25 | 只看该作者
好像和C++ primer上的第六章的程序差不多哦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 21:47 , Processed in 0.090576 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表