Skip to content
Related Articles

Related Articles

Custom Jumble Word Game
  • Difficulty Level : Medium
  • Last Updated : 16 Sep, 2020

Given a string str, the task is to print all the anagrams of the given string which forms a word that exists in English Dictionary.

Note: For using dictionary words, a text file is used where all the words of the dictionary are stored.

Examples:

Input: str = “tac”
Output:
act
cat
Explanation:
The words can be formed from the given string “tac” are act, cat.

Input: str = “atrew”
Output:
tawer
water
wreat
Explanation:
The words can be formed from the given string “atrew” are “tawer”, “water”, “wreat”.



Approach: The idea is to use the concept of File Handling and a text file(say words.txt) that contains all the meaningful words. Below are the steps:

  1. Sort the given string.
  2. Open the words.txt file using file handling ifstream to read the file in C++ as:

    ifstream words(“words.txt”);

  3. For each word in the file words.txt sort the word and compare it with the given sorted string.
  4. If both the string matches in the above step then print the current word in the file words.txt.
  5. Close the file after all the words has been checked.

Below is the implementation of the above approach:

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;
}

Output:

Link to text file: Link

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for the language and STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.
My Personal Notes arrow_drop_up
Recommended Articles
Page :