1 #include "stdafx.h"
2
3 #include <iostream>
4 #include <cstdlib>
5 #include <cstring>
6 #include <algorithm>
7 using namespace std;
8
9 #define EQUAL 0
10 #define WORDLEN 200
11 #define CHAR_COUNT 26
12
13 struct word {
14 char name[WORDLEN];
15 int fre[CHAR_COUNT];
16 };
17
18 class dict {
19 static const int DICTVOL = 100;
20 word list[DICTVOL];
21 int wordcount;
22 public:
23 dict();
24 void addword(const char str[]);
25 void search(const char req[]);
26 void dictsort();
27 friend void calfre(word & tar);
28 friend bool frecmp(word & w1, word & w2);
29 };
30
31
32 void calfre(word & tar) //log the frequency of each char
33 {
34 for (int i = 0; i < CHAR_COUNT; i += 1)
35 tar.fre[i] = 0;
36 for (int i = 0; tar.name[i] != '\0'; i += 1)
37 tar.fre[tar.name[i] - 'a'] += 1;
38 }
39 bool frecmp(word &w1, word &w2)
40 {
41 for (int i = 0; i < CHAR_COUNT; i += 1)
42 {
43 if (w1.fre[i] != w2.fre[i])
44 return false;
45 }
46 return true;
47 }
48 bool dictcmp(word & a, word & b)
49 {
50 if (strcmp(a.name, b.name) < 0) return true;
51 else return false;
52 }
53 dict::dict()
54 {
55 memset(list,0,sizeof(list));
56 wordcount = 0;
57 }
58 void dict::addword(const char str[])
59 {
60 strcpy_s(list[wordcount].name, str);
61 calfre(list[wordcount]);
62 wordcount += 1;
63 }
64 void dict::search(const char req[])
65 {
66 bool found = false;
67 word temp;
68 strcpy_s(temp.name, req);
69 calfre(temp);
70
71 for (int i = 0; i < wordcount; i += 1)
72 {
73 if (frecmp(list[i], temp) == true)
74 {
75 cout << list[i].name << endl;
76 found = true;
77 }
78 }
79 if (found == false)
80 cout << "NOT A VALID WORD" << endl;
81 cout << "******" << endl;
82 }
83 void dict::dictsort()
84 {
85 word temp[DICTVOL];
86 for (int i = 0; i < wordcount; i += 1)
87 temp[i] = list[i];
88 sort(temp, temp + wordcount, dictcmp);
89 for (int i = 0; i < wordcount; i += 1)
90 list[i] = temp[i];
91 }
92
93 int main()
94 {
95 dict d;
96 char temp[WORDLEN];
97 cin >> temp;
98 while (strcmp(temp, "XXXXXX") != EQUAL)
99 {
100 d.addword(temp);
101 cin >> temp;
102 }
103 d.dictsort();
104 cin >> temp;
105 while (strcmp(temp, "XXXXXX") != EQUAL)
106 {
107 d.search(temp);
108 cin >> temp;
109 }
110 return 0;
111 }