【数据结构】邓玉欣的编程作业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
- 【数据结构】邓玉欣的编程作业indexing
- 数据结构的作业
- Indexing
- indexing
- 浙江大学数据结构第一周编程作业【Java】
- Numpy的fancy indexing简介
- 数据结构作业。
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- 数据结构作业
- JSTL中EL标签与Struts2中OGNL标签在JSP页面上的区别
- Struts1—从BeanUtils看struts的实现原理3(自定义BeanUtils的转换器)
- JS 打印功能代码(包括打印预览、打印设置等)
- spoj 6285. Another Game With Numbers(容斥)
- 2014年CPU排名
- 【数据结构】邓玉欣的编程作业indexing
- java MD5加密
- Tomcat配置技巧Top 10
- QuickFix/J 源代码研究
- java之进制计算
- Java Serialization/序列化/反序列化
- 实验2_数据类型与运算_参考答案
- Android浏览器开发 WebView setBlockNetworkImage来龙去脉
- PHPredis初探