これを行う最善の方法は何ですか: 大きなコレクション クラスListCompletions(string digits, Lexicon & lex)
(lex) を取得しました。メソッドでアクセスする必要がありますcontainsPrefix(string prefix)
。メソッド間で参照によってレキシコンを渡すオプションがありました (使用しないメソッドの場合)。またはcontainsPrefix(string prefix)
、プライベート インスタンス変数として保存する際にコピーを作成することもできます。
私の推測では、プライベート インスタンス変数としてコピーを作成することは、パラメーター内でそれを渡すとコードがさらに複雑になるため、はるかに最良のオプションですが、プライベート インスタンス変数はデバッグが難しいため、デバッグが難しくなります。どのメソッドがそれを使用しているかを知っています。しかし、私は完全に確実であるように求めているので、悪いコーディングの習慣を身につけることはありません.
#include "CellPhoneMindReading.h"
void CellPhoneMindReading :: ListCompletions(string digits, Lexicon & lex)
{
//cout << lex.contains("fedora") << endl;
RecursiveMnemonics("", "72");
}
/*
* Function: containsPrefix
* Usage: containsPrefix(prefix);
* ----------------------------------------
* This function returns the given prefix passed as argument if it
* is found in the Lexicon database. prefixes that are not found
* is discarded and the return value is a empty string.
*/
string CellPhoneMindReading :: containsPrefix(string prefix)
{
if (
return "";
}
/*
* Function: RecursiveMnemonics
* Usage: RecursiveMnemonics(prefix, rest);
* ----------------------------------------
* This function does all of the real work for ListMnemonics and
* implements a more general problem with a recursive solution
* that is easier to see. The call to RecursiveMnemonics generates
* all mnemonics for the digits in the string rest prefixed by the
* mnemonic string in prefix. As the recursion proceeds, the rest
* string gets shorter and the prefix string gets longer.
*/
void CellPhoneMindReading :: RecursiveMnemonics(string prefix, string rest)
{
if (rest.length() == 0)
{
cout << prefix << endl;
containsPrefix(prefix);
}
else {
string options = DigitLetters(rest[0]);
for (int i = 0; i < options.length(); i++)
{
RecursiveMnemonics(prefix + options[i], rest.substr(1));
}
}
}
/*
* Function: DigitLetters
* Usage: digits = DigitLetters(ch);
* ---------------------------------
* This function returns a string consisting of the legal
* substitutions for a given digit character. Note that 0 and
* 1 are handled just by leaving that digit in its position.
*/
string CellPhoneMindReading :: DigitLetters(char ch)
{
switch (ch) {
case '0': return ("0");
case '1': return ("1");
case '2': return ("ABC");
case '3': return ("DEF");
case '4': return ("GHI");
case '5': return ("JKL");
case '6': return ("MNO");
case '7': return ("PRS");
case '8': return ("TUV");
case '9': return ("WXY");
default: cout << "Illegal digit" << endl;
}
}