I’m attempting to create a recursive function that outputs a vector of strings that contains all possible word combinations (while retaining order of letters) of a given string. Basically, the foundation of an auto-correct typing program, which produces effects similar that of the iPhone.
vector<string> allPossibleWords(string str, vector<vector<char> > & adjacentKeys)
{
vector<string> words;
cout << str << endl;
if (str.length() == 0)
{
return words;
}
char firstLetter = str[0];
string restOf = str.substr(1, str.length() - 1);
int position = position_in_vector(firstLetter);
for (int i = 0; i < adjacentKeys[position].size(); i++)
{
string temp(1, adjacentKeys[position][i]);
words.push_back(temp);
}
//allPossibleWords(restOf, adjacentKeys);
}
int position_in_vector(char letter)
{
return (letter % 97);
}
For instance, if str is “yp”, the output should be a vector containing the values {“yp”, “tp”, “gp”, “hp”, “up”, “yo”, “to”, “go”, “ho”, “uo”, “yl”, “tl”, “gl”, “hl”, “ul”}. If str is “y”, the output should be a vector containing the values {“y”, “t”, “g”, “h”, “u”}.
The 26 vectors stored in adjacentKeys contain the letters adjacent to the letter that is stored in the first position of the vector.
a qwsz
b vghjn
c xdfgv
d zserfcx
//and so on
I am stuck with this function, and can’t figure out how to recursively build this vector.
(Update: 2130 GMT Sunday: I’ve significantly changed my answer. I think this works now.)
Here is a complete program. There are other changes I think I would make, but I’m trying to keep to the spirit of your initial solution. It’s important to return a single empty word when
str.length()==0.return