/*Atribui o valor do argumento ao parametro (versao para int)*/ void setParametro(char *parametro, int argumento) { int entrada; entrada = converteString(parametro); if (entrada == converteString("NUM_LINES")) numLines = argumento; else if (entrada == converteString("NUM_COLUMNS")) numColumns = argumento; else if (entrada == converteString("NUM_ITERATIONS")) numIterations = argumento; else if (entrada == converteString("LEFT_MARGIN_LIMIT")) leftMargin = argumento; else if (entrada == converteString("RIGHT_MARGIN_LIMIT")) rightMargin = argumento; else if (entrada == converteString("NSEED")) seed = argumento; else if (entrada == converteString("REFRESH_RATE")) refreshRate = argumento; else if (entrada == converteString("MIN_ISLE_DIST")) isleDist = argumento; else if (entrada == converteString("REPORT_DATA")) reportData = argumento; else printf("%s nao e' um argumento valido.", parametro); }
// Método que verifica se um string está na trie, retorna 1 caso estejae -1 caso contrário int Trie::buscaString(string word) { int i = 0; Nodo* Aux; // Nodo auxiliar Aux = raiz; // que recebe a raiz da trie word = converteString(word); // Converte todas as letras para maiúsculas while(word[i] != '\0') // enquanto não é o fim da string continua procurando { Aux = Aux->getNodo(word[i]); // auxiliar recebe o nodo pra onde aponta o caracter da string if (Aux != NULL) // Se esse nodo não for nulo é porque até o momento existe a string então tem que seguir procurando { if ( word[i] == '$') // Caso chegou no caracter de fim de string é porque a string está na trie { return 1; // Então retorna 1 } // Se nao for caracter de fim de string apenas segue pro proximo caracter } else // Se o nodo for nulo então é porque não tem o caracter q ta procurando logo a string toda nao da na trie { return -1; // retorna -1 } i++; } }
// Método que verificar quais são as maiores substrings palíndromas dentro de uma string void Trie::verificaPalindroma(string word) { word = converteString(word); // 1º Converte todas as letras para maiúsculas this->criarTrieSufixos(word); // 2º Cria a trie de sufixos daquela palavra string aux2, aux; // strings auxiliares // aux - string invertida que é percorrida sempre diminuindo a letra do inicio // aux2 - string que recebe a maior substring palimdroma encontra a partir de aux aux = inverteString(word); // aux recebe a string invertida aux.erase(aux.begin()); // remover o 1º caracter que quando invertido é o '$' int tamMaiorPalindroma = 0; // tamanho da maior palindroma encontrada int i = 0; while (aux.compare("$") > 0) // Enquanto a string invertida não é '$' { if (aux.size() >= tamMaiorPalindroma) // Se o tamanho da string for menor que a maior palindroma não tem porque seguir procurando { // já que por mais que encontre outra palindroma não tem como ela ser maior ou igual aux2 = this->buscaMaiorString(aux); // aux2 recebe a maior string encontrada a partir de aux if ((aux2.size() == tamMaiorPalindroma) && (aux2.compare(inverteString(aux2)) == 0)) // Se o tamanho for igual e realmente for uma palíndroma { // Então insere na trie de palindromas aux2+='$'; palindromas->insereString(aux2); } if ((aux2.size() > tamMaiorPalindroma) && (aux2.compare(inverteString(aux2)) == 0)) // Se o tamanho por maior e for realmente uma palíndroma { // Então apaga a trie anterior, cria uma nova e insere a string nela free(palindromas); palindromas = new Trie(); aux2+='$'; palindromas->insereString(aux2); tamMaiorPalindroma = aux2.size()-1; // Nese caso o tamanho da maior palíndroma passa a ser o da string atual } aux.erase(aux.begin()); // Remove o 1º caracter da string e recomeça a busca } // Caso o tamanho da string for maior que a string restante pode sair do laço else { break; } } // Se o tamanho da maior palíndroma for igual a 1 então é porque só encontrou letras separadas como palíndromas nesse caso não encontrou nenhuma palíndroma de verdade if (tamMaiorPalindroma == 0) { cout<< "Não possui nenhuma palindroma"<< endl; } // Senão imprime a trie de palíndromas else { palindromas->imprimeTrie(); } }
string Card::toString(){ string carta; string resultadoNaipe; switch(this->naipe){ case 0: resultadoNaipe = "H"; break; case 1: resultadoNaipe = "D"; break; case 2: resultadoNaipe = "S"; break; case 3: resultadoNaipe = "C"; break; default: cout << "Numero invalido!" << endl; } if(this->valor == 0){ carta = "NULL"; return carta; } carta = resultadoNaipe + converteString(this->valor); return carta; }
/*Atribui o valor do argumento ao parametro (versao para char)*/ void setParametroc(char* parametro, char argumento) { int entrada; entrada = converteString(parametro); if (entrada == converteString("DEF_WATER")) water = argumento; else if (entrada == converteString("DEF_ISLE")) isle = argumento; else if (entrada == converteString("DEF_EARTH")) earth = argumento; else printf("%s nao e' um argumento valido.", parametro); }
/*Atribui o valor do argumento ao parametro (versao para float)*/ void setParametrof(char *parametro, float argumento) { int entrada; entrada = converteString(parametro); if (entrada == converteString("H20_MAX_SPEED")) waterSpeed = argumento; else if (entrada == converteString("PROB_GEN_ISLE")) isleProb = argumento; else if (entrada == converteString("RIVER_FLUX")) riverFlux = argumento; else printf("%s nao e' um argumento valido.", parametro); }
// Método que insere um string na trie void Trie::insereString(string word) { int i = 0; Nodo* Aux; // Nodo auxiliar Aux = raiz; // que recebe a raiz da trie word = converteString(word); // Converte todas as letras para maiusculas while(word[i] != '\0') // enquanto nao é o fim da string vai adicionando { if (Aux->getNodo(word[i]) == NULL) // Se o nodo for nulo é porque ainda não foi inserido um prefixo igual { Aux->insere(word[i]); // Nesse caso insere um nodo com este prefixo } Aux = Aux->getNodo(word[i]); // E o nodo auxiliar desce um nodo na hierarquia da trie i++; } }