diff --git a/WeC/main.cpp b/WeC/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6dc0d9fc0748a6634260ae42be7fa46e50ac9999 --- /dev/null +++ b/WeC/main.cpp @@ -0,0 +1,150 @@ +#include <iostream> +#include <list> +#include <fstream> +#include "Cards.cpp" +#include <string> +#include <cstring> + +using namespace std; + +const double tolerance = 0.2675; + +//Aufgabe 1 +// Implementiert den Algorithmus zur Berechnung der Levensthein-Distanz (LD) (5P). + + +int get_l_distance(string zeile, string spalte) { + // Initialise a 2d Matrix with the length of the word + int M[zeile.length() + 1][spalte.length() + 1]; + + for (int ZEILE = 0; ZEILE < zeile.length() + 1; ZEILE++) { + + for (int SPALTE = 0; SPALTE < spalte.length() + 1; SPALTE++) { + + M[ZEILE][SPALTE] = 0; + + if (ZEILE == 0) { + M[ZEILE][SPALTE] = SPALTE; + } + + if (SPALTE == 0) { + M[ZEILE][SPALTE] = ZEILE; + } + } + } + + for (int ZEILE = 1; ZEILE < zeile.length() + 1; ZEILE++) { + + for (int SPALTE = 1; SPALTE < spalte.length() + 1; SPALTE++) { + + int c = 1; + if (zeile[ZEILE - 1] == spalte[SPALTE - 1]) { + c = 0; + } + + int rep = M[ZEILE - 1][SPALTE - 1] + c; + int ins = M[ZEILE][SPALTE - 1] + 1; + int del = M[ZEILE - 1][SPALTE] + 1; + + M[ZEILE][SPALTE] = min(rep, min(ins, del)); + } + } + return M [zeile.length()][spalte.length()]; +} + +int main() { + + ifstream scrambledFile("scrambled.txt"); + + list<Cards> cardList; + + string singleLine; + + //Aufgabe 3 + while (getline(scrambledFile, singleLine)) { + + //string singleLine copied in char Array + int n = singleLine.length(); + char singleLineArray[n + 1]; + strcpy(singleLineArray, singleLine.c_str()); + + + //singleLineArray split in substrings + char *singleLineSubstring = strtok(singleLineArray, "|"); + string cardInfoArr[5]; + + //Logic for seperating the Substrings + int j = 0; + while (singleLineSubstring) { + + //Substring (Kartenattribute) werden in cardInfoArrgeschrieben + cardInfoArr[j] = singleLineSubstring; + j++; + singleLineSubstring = strtok(nullptr, "|"); + } + + //initalising new Card Object + Cards newCard; + + //setting Card Attribute + newCard.setName(cardInfoArr[0]); + newCard.setMana(cardInfoArr[1]); + newCard.setCmc(cardInfoArr[2]); + newCard.setType(cardInfoArr[3]); + newCard.setCount(cardInfoArr[4]); + + //add Card in card List + cardList.push_back(newCard); + } + + scrambledFile.close(); + + //Aufgabe 4 + ofstream cardWrite("cardOutput.txt"); + for (Cards c: cardList) { + cardWrite << c.getName() << "|" << c.getMana() << "|" << c.getCmc() << "|" << c.getType() << "|" << c.getCount() + << "\n"; + } + + cardWrite.close(); + + //Aufgabe 5 + ifstream reference("reference.txt"); + + list<string> referenceNames; + + while (getline(reference, singleLine)) { + referenceNames.push_back(singleLine); + } + reference.close(); + + //Aufgabe 6 + list<Cards> repairedCards; + + for (Cards card: cardList) { + for (string str: referenceNames) { + int l_dist = get_l_distance(card.getName(), str); + + if (l_dist < card.getName().length() * tolerance) { + card.setName(str); + repairedCards.push_back(card); + break; + } + } + } + + + //Aufgabe 7 + + // create a new txt file called repairedCards + ofstream repairedCardsWrite("repairedCards.txt"); + + for (Cards crd: repairedCards) { + repairedCardsWrite << crd.getName() << "|" << crd.getMana() << "|" << crd.getCmc() << "|" << crd.getType() + << "|" << crd.getCount() << "\n"; + } + + repairedCardsWrite.close(); + + return 0; +} \ No newline at end of file