【数据结构】邓玉欣的编程作业indexing

来源:互联网 发布:ssh管理系统源码 编辑:程序博客网 时间:2024/05/21 21:53

#include <iostream>#include <fstream>#include <string>#include <vector>#include "wordlist.h"using namespace std;int count = 0;int main(){    ifstream fin("shenbingyu.txt");    ofstream fout("sby.txt");    if(!fin){cerr<<"ERROR";}    char ch;    vector<string> word;    string s;    while(!fin.eof())    {        ch=fin.get();        fout<<ch;        if(!(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))))        {            count++;            if(s!="")word.push_back(s);            s="";            continue;        }        s.push_back(ch);    }    fin.close();    fout.close();    passage shenbingyu;    for(size_t i=0;i<word.size();i++)    {        shenbingyu.insert(word[i]);    }    cout<<"There are "<<count<<" words in this passage."<<endl;    cout<<"=================================================="<<endl;    shenbingyu.print();    return 0;}

第一次的project的第一题。


大概意思就是自己实现一个数据结构,用于储存一串国家名。并且可以按照字母序排序。


上面是main函数部分,用于对文章进行输入。


其中wordlist这个是一个自己编写的类。如下

#ifndef WORDLIST_H_INCLUDED#define WORDLIST_H_INCLUDED#include <string>#include <iostream>#include <iomanip>using namespace std;//node 用于记录一个单词class node{    public:    string sword;    node *next;    int count;//这个单词记录的次数    node(string w =""){next=NULL;count=0;sword=w;}    ~node(){delete next;}};//wordOfSameLetter 用于储存单词链表class wordOfSameLetter{    private:    node *head;    node *curr;    int size;//包含的单词数    //swap交换两个node里面内容    void swap(node*n1,node*n2)    {        string w = n1->sword;n1->sword=n2->sword;n2->sword=w;        int t = n1->count; n1->count=n2->count; n2->count= t;    }    //按照字典序比较    int compare(string s1,string s2)    {   char c1=s1[0];char c2=s2[0];        int i1=s1.size();int i2 = s2.size();        for(int i=0;i<i1;i++) s1[i]=tolower(s1[i]);        for(int i=0;i<i2;i++) s2[i]=tolower(s2[i]);        if(s1==s2) return c1<c2;        return s1>s2;    }    public:    wordOfSameLetter()    {        head = curr = new node();        size = 0;    }    ~wordOfSameLetter()    {        delete head;        delete curr;    }    //冒泡排序    void merge()    {        for(int i=0;i<size;i++)        {            curr = head;            node *tmp;            curr = curr->next;            tmp = curr;            while(tmp->next!=NULL)            {                //if(tmp->sword > tmp->next->sword)                if(compare(tmp->sword,tmp->next->sword)==1)                    swap(tmp,tmp->next);                tmp = tmp->next;            }        }    }    void insertl(string w)//如果wordOfSameLetter中有w这个单词就count++;没有的话就插在最后    {   bool f = false;        curr =head;        while(curr->next!=NULL)        {            curr=curr->next;            if(w==curr->sword)            {                curr->count++;                f = true;            }        }        if(!f){            curr = curr->next =new node(w);            curr->count++;            size++;}    }    void print()    {        merge();//如果输出的话就把列表merge一下        curr = head;        while(curr->next!=NULL)        {            curr = curr->next;            cout<<"\t"<<left<<setw(15)<<curr->sword;            cout<<"\t"<<curr->count<<endl;        }    }};//用于储存首字母相同的单词链表class letterlist{    public:    char letter;    letterlist* next;    wordOfSameLetter words;    int nol;    letterlist(char a='^',letterlist* n =NULL)    {        letter = a;        next = n;        nol = 0;    }    ~letterlist(){delete next;}    void insertw(string w)//在letterlist中插入一个单词    {        words.insertl(w);        ++nol;    }    void print()//打印letterlist中的单词    {        words.print();    }};//包括26个letterlist分别用来储存单词class passage{    private:    letterlist *head;    letterlist *curr;    public:    passage()    {        head=curr=new letterlist();        for(char ch='A';ch<'Z'+1;ch++)        {            curr->next=new letterlist(ch,NULL);            curr=curr->next;        }    }    ~passage()    {        delete head;        delete curr;    }    void insert(string w)//在passage中插入一个单词    {        char ch = w[0];        for(curr=head->next;curr!=NULL;curr=curr->next)        {            if((ch==curr->letter)||(ch==(curr->letter+32)))            {                curr->insertw(w);                break;            }        }    }    void print()//输出所有不为空的letterlist    {        for(curr=head->next;curr!=NULL;curr=curr->next)        {            if(curr->nol==0) continue;            cout<<curr->letter<<":"<<endl;            curr->print();            cout<<endl;        }    }};#endif // WORDLIST_H_INCLUDED


以上。(以前的作业,贴的晚了..)




0 0
原创粉丝点击