Это моя первая публикация здесь, так что извиняйтесь заранее, если я что-то делаю неправильно. Я работаю над проектом, в котором часть программы должна перевести телефонное слово (IE «Rad-Code») на соответствующие цифры телефона (IE 723-2633). Я пытаюсь использовать оператор switch вместе с функциями члена класса() и length(). Я попытался настроить порядок моего кода для этого раздела, но он продолжает давать мне сообщение об ошибке: «Введите телефонное слово: Rad-Code 723-2633terminate, вызвав после вызова экземпляра« std :: out_of_range », что (): basic_string :: по адресу: __n (что 8)> = this-> размер() (который 8)»Функция члена класса в() и операторы switch с контуром
Вот код в вопросе:
else if (choice == PHONE_WORD)
{
cout << "\nEnter the phone word: ";
cin >> phoneWord;
/*while (phoneWord.length() != 8)
{
cout << "Please enter a valid phone number length: ";
getline(cin, phoneWord);
}*/
for (int i = 0; i < phoneWord.length(); i++)
switch (phoneWord.at(i))
{
case 'A':
case 'a':
case 'B':
case 'b':
case 'C':
case 'c':
cout << "2";
break;
case 'D':
case 'd':
case 'E':
case 'e':
case 'F':
case 'f':
cout << "3";
break;
case 'G':
case 'g':
case 'H':
case 'h':
case 'I':
case 'i':
cout << "4";
break;
case 'J':
case 'j':
case 'K':
case 'k':
case 'L':
case 'l':
cout << "5";
break;
case 'M':
case 'm':
case 'N':
case 'n':
case 'O':
case 'o':
cout << "6";
break;
case 'P':
case 'p':
case 'Q':
case 'q':
case 'R':
case 'r':
case 'S':
case 's':
cout << "7";
break;
case 'T':
case 't':
case 'U':
case 'u':
case 'V':
case 'v':
cout << "8";
break;
case 'W':
case 'w':
case 'X':
case 'x':
case 'Y':
case 'y':
case 'Z':
case 'z':
cout << "9";
break;
case '-':
cout << "-";
break;
default:
cout << "Please enter a valid input: ";
break;
}
cout << phoneWord << " translates to " << phoneWord.at(0) << phoneWord.at(1) << phoneWord.at(2) << phoneWord.at(3) << phoneWord.at(4) << phoneWord.at(5) << phoneWord.at(6) << phoneWord.at(8) << ".";
}
И вот вся программа: –
Вы не проверите длину здесь: 'phoneWord.at (6) << phoneWord.at (8)' Если строка имеет длину 8 букв, действительные индексы - 0-7. Вы можете рассмотреть цикл, он менее подвержен ошибкам и не учитывает определенный размер. –
Привет и спасибо за быстрый ответ. Я пытаюсь сделать цикл, но я не уверен, с чего начать. Я пытаюсь использовать цикл «for» в импровизированном массиве, но это может быть, когда возникают мои проблемы. Кроме того, я случайно вошел 8 вместо 7. Вау, я просто попробовал, и я определенно буду дальше. Конечно, есть некоторые дополнительные вещи, которые мне нужно исправить, но это был простой промах. Я очень ценю это! Я все еще работаю над этим разделом, поэтому у меня могут возникнуть дополнительные вопросы. –