Juego de palabras revoltijo personalizado

Dada una string str , la tarea es imprimir todos los anagramas de la string dada que forman una palabra que existe en el diccionario inglés.

Nota: Para usar palabras del diccionario, se usa un archivo de texto donde se almacenan todas las palabras del diccionario.

Ejemplos:

Entrada: str = “tac”
Salida:
act
cat
Explicación:
Las palabras que se pueden formar a partir de la string dada “tac” son act, cat.

Entrada: str = “atrew”
Salida:
tawer
agua
wreat
Explicación:
Las palabras que se pueden formar a partir de la string dada “atrew” son “tawer”, “water”, “wreat”.

Enfoque: La idea es usar el concepto de manejo de archivos y un archivo de texto (digamos palabras.txt ) que contenga todas las palabras significativas. A continuación se muestran los pasos:

  1. Ordenar la string dada .
  2. Abra el archivo words.txt usando el manejo de archivos ifstream para leer el archivo en C++ como:

    ifstream palabras(“palabras.txt”);

  3. Para cada palabra en el archivo words.txt , ordene la palabra y compárela con la string ordenada dada.
  4. Si ambas strings coinciden en el paso anterior, imprima la palabra actual en el archivo words.txt .
  5. Cierre el archivo después de que se hayan verificado todas las palabras.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
  
#include <bits/stdc++.h>
using namespace std;
  
// Function that sorts the given string
// and transform a sorted string to uppercase
string sortString(string word)
{
    // Transformed to uppercase
    transform(word.begin(), word.end(),
              word.begin(), ::toupper);
  
    // Sort the words
    sort(word.begin(), word.end());
    return word;
}
  
// Function that finds the anagram of
// given string in the given text file
void jumbledString(string jumble)
{
    // Initialize strings
    string checkPerWord = "";
    string userEnteredAfterSorting;
  
    // Sort the string
    userEnteredAfterSorting
        = sortString(jumble);
  
    // Using filehandling ifstream
    // to read the file
    ifstream words("words.txt");
  
    // If file exist
    if (words) {
  
        // Check each and every word
        // of words.txt(dictionary)
        while (getline(words,
                       checkPerWord)) {
  
            string Ch
                = sortString(checkPerWord);
  
            // If words matches
            if (Ch
                == userEnteredAfterSorting) {
  
                // Print the word
                cout << checkPerWord
                     << endl;
            }
        }
  
        // Close the file
        words.close();
    }
}
  
// Driver Code
int main()
{
    // Given string str
    string string = "tac";
  
    // Function Call
    jumbledString(string);
  
    return 0;
}

Producción:

Enlace al archivo de texto: Enlace

Publicación traducida automáticamente

Artículo escrito por NANDINIJAIN y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *