Ho alcuni compiti a casa che stavo percorrendo fino a quando sono arrivato a questo ultimo passaggio e ora sono perplesso, apprezzerei davvero un po 'di aiuto.Guida del generatore di parole telefoniche C++
La premessa del progetto è quella di creare un file di parole possibili con un numero di telefono. L'utente ha il compito di inserire un numero con il formato '### - ####'. Il codice quindi estrae il trattino e invia il numero di telefono al metodo wordGenerator. So che tutto funziona fino a questo punto. Quando arriva il momento di produrre le diverse possibilità di parole è dove sto avendo il mio problema. Ecco ciò che il mio metodo assomiglia:
// function to form words based on phone number
void wordGenerator(const int * const n)
{
// set output stream and open output file
/* Write a declaration for an ofstream object called
outFile to open the file "phone.dat" */
ofstream outFile("phone.dat");
// letters corresponding to each number
/* Write a declaration for an array of 10 const char *'s
called phoneLetters. Use an initializer list to assign
each element of the array the corresponding string of
three letters. Use dummy characters for 0 and 1 */
const char * phoneLetters[] = {"###", "###", "ABC", "DEF", "GHI",
"JKL", "MNO", "PRS", "TUV", "WXY"};
// terminate if file could not be opened
/* Write code to check if the file was opened successfully,
and terminate if not */
if(!outFile)
{
cerr << "The file could not be opened";
exit(1);
}
int count = 0; // number of words found
// output all possible combinations
for (int i1 = 0; i1 <= 2; i1++)
{
for (int i2 = 0; i2 <= 2; i2++)
{
for (int i3 = 0; i3 <= 2; i3++)
{
for (int i4 = 0; i4 <= 2; i4++)
{
for (int i5 = 0; i5 <= 2; i5++)
{
for (int i6 = 0; i6 <= 2; i6++)
{
for (int i7 = 0; i7 <= 2; i7++)
{
/* Write a series of cascaded stream insertion
operations to output a set of seven letters
to outFile, followed by a space */
outFile << phoneLetters[i7 + 2] << phoneLetters[i6 + 2] << phoneLetters[i5 + 2] << phoneLetters[i4 + 2] << phoneLetters[i3 + 2] << phoneLetters[i2 + 2]
<< phoneLetters[i1 + 2] << ' ';
if (++count % 9 == 0) // form rows
outFile << '\n';
} // end for
} // end for
} // end for
} // end for
} // end for
} // end for
} // end for
// output phone number
outFile << "\nPhone number is ";
for (int i = 0; i < 7; i++)
{
if (i == 3)
outFile << '-';
outFile << n[ i ];
} // end for
/* Write a statement to close the ouput file */
outFile.close();
system("pause");
} // end function wordGenerator
Purtroppo mi è stato dato uno scheletro di codice e ha detto di riempire gli spazi vuoti per completare l'assegnazione. Ovunque dove i commenti sono bloccati (/ * * /) è dove devo compilare il codice.
Non sono sicuro di cosa devo fare per produrre il formato corretto delle parole possibili. Ho provato a cercare su google, ma tutti i risultati che ho trovato utilizzano una dichiarazione switch molto più semplice (secondo me) per ottenere questo risultato e sono vincolato al modello :(
Tutto l'aiuto è apprezzato, anche una spinta nella parte destra direzione
Edit:.. ho solo pensato di un'altra cosa che mi sento che se qualcuno potrebbe anche aiutarmi a capire come iterare attraverso i personaggi di phoneLetters [] individualmente invece di un blocco, che sarebbe un passo significativo avanti Esempio: quando si legge il numero "2" di un numero di telefono invece di stampare "ABC", stampare "A" per tutte le combinazioni possibili, quindi passare a "B"
Edit: Ecco il mio main():
int main()
{
int phoneNumber[ 7 ] = { 0 }; // holds phone number
// prompt user to enter phone number
cout << "Enter a phone number (digits 2 through 9) "
<< "in the form: xxx-xxxx\n";
// loop 8 times: 7 digits plus hyphen;
// hyphen is not placed in phoneNumber
for (int u = 0, v = 0; u < 8; u++)
{
int i = cin.get();
// test if i is between 0 and 9
if (i >= '0' && i <= '9')
phoneNumber[ v++ ] = i - '0';
} // end for
wordGenerator(phoneNumber); // form words from phone number
return 0;
} // end main
si potrebbe provare a cambiare l'array phoneLetters a una matrice bidimensionale di char di, allora sarà facile per voi di scorrere ogni lettera –
7 nidificati per loops di solito è un buon segno che stai facendo qualcosa di sciocco ... – AJG85
@Msonic Per semplificare il compito. –