diff --git a/ReProjet/Sane_Granma.cc b/ReProjet/Sane_Granma.cc index 4b88505..f58ddda 100644 --- a/ReProjet/Sane_Granma.cc +++ b/ReProjet/Sane_Granma.cc @@ -1,45 +1,150 @@ -// Propagatio.cc +// Sane_Granma.cc // Auteur : Quentin Berling // Version : 1.0 +#include #include -#include #include +#include using namespace std; +struct StringPlus{ + string str; + unsigned nbT; + unsigned nbD=0; + string alpha; + unsigned alphabétique; +}; + const string NOT_IN_CAPITAL_LETTERS("The word is not purely in capital letters"); const string DOUBLE_WORD("Each word can be present only once"); const string EMPTY_DICO("The dictionnary cannot be empty"); const string NO_ANAGRAM("There is no anagram for this message and this dictionary"); -void read_input(); +const vector operator+(vector u, vector const &v); +void operator+=(vector &u, vector const &v); + +void read_input(vector &dico, vector> &allwords); +StringPlus str_to_StrPlus(const string &str); +void sort1234(vector &dico); +void sort234(vector &dico); +void sort34(vector &dico); +void sort4(vector &dico); + +const vector operator+(vector u, vector const &v) { + vector w; + + for (auto& wordplus : u) { + w.push_back(wordplus); + } + + for (auto& wordplus : v) { + w.push_back(wordplus); + } + + return w; +} + +void operator+=(vector &u, vector const &v) { + u=u+v; +} int main() { - read_input(); + vector dico; + vector> allwords; + + read_input(dico, allwords); + for (auto& wordplus : dico) { + cout << wordplus.str << endl; + } + sort1234(dico); + for (auto& wordplus : dico) { + cout << wordplus.str << endl; + } return 0; } -void read_input() { +void read_input(vector &dico, vector> &allwords) { string str; + StringPlus strplus; string mode="dico_read"; - vector dico; vector words; - vector> allwords; while(cin >> str) { if (mode == "dico_read" && str != ".") { - dico.push_back(str); + strplus=str_to_StrPlus(str); + dico.push_back(strplus); } else if (str != "." && str != "*") { words.push_back(str); } if (str == ".") { if (mode != "word_read") { mode="word_read"; } else if (str != "*") { allwords.push_back(words); words.clear(); } } } } + +StringPlus str_to_StrPlus(const string &str) { + StringPlus strplus; + array alphabet={0}; + unsigned iter; + + strplus.str=str; + strplus.nbT=str.size(); + + for (auto& c : str) { + iter=c-'A'; + alphabet[iter]+=1; + } + + for (int n=0; n < 26; n++) { + if (alphabet[n] > 0) { + strplus.nbD++; + iter=alphabet[n]; + + while (iter > 0) { + strplus.alpha+='a'+n; + iter--; + } + } + } + + for (auto& letterbool : alphabet) { + strplus.nbD+=letterbool; + } + + return strplus; +} + +void sort1234(vector &dico) { + unsigned nbTmax(0); + vector sorted_dico, nbt_sorted_dico; + + for (auto& wordplus : dico) { + if (wordplus.str.size() > nbTmax) { + nbTmax=wordplus.str.size(); + } + } + + for (unsigned i=1; i <= nbTmax; i++) { + for (auto& wordplus : dico) { + if (wordplus.str.size() == i) { + nbt_sorted_dico.push_back(wordplus); + } + } +// sort234(nbt_sorted_dico); +// sorted_dico.insert(sorted_dico.end(), nbt_sorted_dico.begin(), nbt_sorted_dico.end() ); + sorted_dico+=nbt_sorted_dico; + nbt_sorted_dico.clear(); + } + + dico=sorted_dico; +} + +// void sort234(vector &dico) { +// }