У меня проблемы с функцией bool, когда пользователь вводит две буквы и выводит, какая буква самая высокая на алфавите

Я новичок в обучающих функциях, я в основном делаю упражнения для колледжа, где пользователь вводит две буквы, например, aj, а затем буква одна выше буквы два в алфавите и наоборот. Вопрос в том, что это должна быть функция bool.

4. a. Напишите прототип функции IsAlphaHigher, которой может быть передана пара символов, и которая вернет логическое значение, указывающее, является ли первый символ выше в алфавитном порядке. (Примечание 'a выше, чем' z) b. Напишите определение функции IsAlphaHigher c. Напишите тестовое приложение, которое будет использовать функцию IsAlphaHigher.

Теперь легко, если пользователь вводит что-то вроде буквы A или заглавной буквы AN. Какая бывшая буква была самой низкой в таблице ASCII, она выше на алфавите. Но как насчет того, когда пользователь вводит что-то вроде букв в верхнем регистре R в нижнем регистре, например, верхний регистр R равен 82 в таблице ASCII, а малый a равен 97.

Я понял, что если какая-либо маленькая буква письма - любая прописная буква = больше 32, то буква верхнего регистра выше на алфавите.

Логика этого заключается в том, что a - A = 32, b - B = 32, q - Q = 32 и т.д. Таким образом, все выше 32 буквы в верхнем регистре выше, чем в нижнем регистре, что ниже 32, нижний регистр выше, чем заглавная буква.

Я использовал ряд утверждений if, чтобы обойти это, но я получаю сообщение об ошибке, и я не совсем уверен, откуда он пришел или почему так я действительно ценю некоторую помощь.

Благодарю.

#include <iostream>
using namespace std;
bool IsAlphaHigher(char letterOne, char letterTwo);

int main()
{
    char letter1, letter2;

    cout << "Enter two letters ";
    cin >> letter1 >> letter2;

    IsAlphaHigher(letter1, letter2);

    if (IsAlphaHigher(letter1,letter2) == 1)
        cout << "letter one is higher on the alphabet than letter two ";
    else
        cout << "letter two is higher on the alphabet than letter one ";
}


bool IsAlphaHigher(char letterOne, char letterTwo)
{

    bool status;

    if (letterOne < 90 && letterTwo < 90)
        {
            if (letterOne < letterTwo)
                status = true;
            else
                status = false;
        }

    if (letterOne > 90 && letterTwo < 90)
        {
            if (letterOne < letterTwo)
                status = true;
            else
                status = false;
        }

    if (letterOne < 90 && letterTwo > 90)
        {
            if (letterTwo - letterOne <= 32)
                status = true;
            else
                status = false;
        }

    if (letterOne > 90 && letterTwo < 90)
        {
            if (letterOne - letterTwo <= 32)
                status = true;
            else
                status = false;
        }
    return status;
}

Когда я его создаю, он говорит, что нет ошибок, но когда я вхожу в командную оболочку и набираю две буквы, это дает мне "Ошибка проверки времени выполнения №3". Я понятия не имею, почему.

Это моя первая логическая функция, поэтому я предполагаю, что я делаю что-то неправильно. Любые советы о том, где я буду ошибаться, будут очень благодарны.

+1
источник поделиться
3 ответа

Сначала вы можете просто преобразовать две буквы в одни и те же случаи. Не уверен, хотя в каком случае вы хотите вернуть true.

bool IsAlphaHigher(char letterOne, char letterTwo)
{

    if (letterOne > 90) letterOne -= 32;
    if (letterTwo > 90) letterTwo -= 32;

    return letterOne > letterTwo;  // true if letterOne is higher.
}
+2
источник

Перед преобразованием просто преобразуйте все буквы в верхний или нижний регистр. Если вам нужно сохранить обсадную колонну, создайте временные переменные, чтобы провести сравнение

+1
источник
#include <iostream>

using namespace std;

void alphabetical_order(char first, char second)
{
    //65 - 90 are the ascii numbers for upper case letters
    if(first >= 65 && first <= 90)
        first = tolower(first);

    if(second >= 65 && second <= 90)
        second = tolower(second);

    if(first > second)
        cout << first << "," << second << endl;
    else
        cout << second << "," << first << endl;
}

int main()
{
    alphabetical_order('A','Z');
}

Надеюсь, это поможет вам понять, поиграть с этим кодом и посмотреть, не поможет ли вам это.

EDIT: Возможно, вы захотите добавить проверку ошибок в свою программу, чтобы убедиться, что вам дано письмо, а не символ. Посмотрите http://www.asciitable.com/, чтобы получить правильные номера. (65 - 90 и 97 - 122)

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос