В моем вводном классе мне поручено перевести телефонный номер, в котором могут быть буквы, обратно в заранее определенный список номеров (например, 1-800-COLLECT будет отображаться как 1-800-2655328), и в настоящее время я может переводить буквы в числа, но по какой-либо причине небуквенные символы в телефонных номерах не переводятся. Это основная функция:

int main()
{
    string original;
    cout << "Please enter a phone number with letters: ";
    getline(cin, original);
    cout << "This is your number without letters: ";
        for (int i = 0; i < original.length(); i++)
        {
            if (original[i] < 0 || original[i] > 9)
            {
                translate(original[i]);
            }
            else
                cout << original[i];
        }
}

Функция translate просто берет любой элемент, который ей подали, и, если он находится между Aa - Zz, он отображает заранее определенное число. (Aa - Cc будет отображать число 2 и т. Д.) Пока он работает для перевода, так как когда я ввожу "1800GOTJUNK", он возвращает "4685865" нормально, но не признает "1800" перед ним, я думаю, что есть что-то неправильно с тем, как я структурирую операторы if и for, чтобы все отображалось правильно, может ли кто-нибудь дать мне совет?

c++
0
QuietGrave 27 Ноя 2021 в 05:17
Не изобретайте велосипед. if (!std::isdigit(original[i]).
 – 
Pete Becker
27 Ноя 2021 в 06:37

1 ответ

Лучший ответ

Этот:

if (original[i] < 0 || original[i] > 9)

Сравнивается с кодами ASCII 0 и 9, а не с фактическими символами. Должен быть:

if (original[i] < '0' || original[i] > '9')
1
John Zwinck 27 Ноя 2021 в 05:24
Большое спасибо!
 – 
QuietGrave
27 Ноя 2021 в 05:35