Tôi có một số bài tập về nhà mà tôi đã bay qua cho đến khi tôi bước đến bước cuối cùng này và bây giờ tôi đang bối rối, tôi thực sự sẽ đánh giá cao một số trợ giúp.Máy phát điện từ điện thoại Trợ giúp C++
Tiền đề của dự án là tạo một tệp các từ có thể cho một số điện thoại. Người dùng có nghĩa là nhập một số có định dạng '### - ####'. Mã sau đó kéo dấu gạch nối ra và gửi số điện thoại đến phương thức wordGenerator. Tôi biết rằng mọi thứ hoạt động cho đến thời điểm này. Khi thời gian đến đầu ra các khả năng khác nhau của các từ là nơi tôi đang gặp vấn đề của tôi. Dưới đây là những gì phương pháp của tôi trông giống như:
// 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
Thật không may tôi đã được cung cấp một bộ mã và yêu cầu điền vào chỗ trống để hoàn thành bài tập. Ở khắp mọi nơi mà các bình luận bị chặn (/ * * /) là nơi tôi phải điền mã.
Tôi không chắc mình cần làm gì để xuất ra định dạng đúng của các từ có thể. Tôi đã thử tìm kiếm google, nhưng tất cả các kết quả tôi tìm thấy sử dụng một tuyên bố chuyển đổi đơn giản hơn nhiều (theo ý kiến của tôi) để đạt được điều này và tôi bị ràng buộc với mẫu: (
Tất cả trợ giúp đều được đánh giá cao, thậm chí là di chuyển ở bên phải Chỉ cần nghĩ về một điều khác Tôi cảm thấy rằng nếu ai đó thậm chí có thể giúp tôi tìm ra cách để lặp qua các ký tự của phoneLetters [] một cách riêng lẻ thay vì một khối, đó sẽ là một bước đáng kể. Ví dụ: khi đọc số '2' của số điện thoại thay vì in "ABC", in "A" cho tất cả các kết hợp có thể, sau đó chuyển sang "B".
Edit: Đây là chính tôi():
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
bạn có thể thử thay đổi mảng phoneLetters của bạn vào một mảng hai chiều của char, sau đó nó sẽ được dễ dàng để bạn lặp qua từng chữ cái –
7 lồng nhau cho vòng lặp thường là dấu hiệu tốt bạn đang làm điều gì đó ngớ ngẩn ... – AJG85
@Msonic Để đơn giản hóa tác vụ. –