2017-01-23 12 views
1

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

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

Теперь легко, если пользователь вводит что-то вроде n или заглавной буквы A. Какая бывшая буква была самой низкой в ​​таблице 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; 
} 

Когда я строй, он не говорит, что нет никаких ошибок, но когда я иду в оболочку командной строки и введите в двух письмах он дает мне «время сбой проверки Run # 3 T» я понятие не имею, почему.

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

+0

Вы можете использовать 'toupper()' или 'tolower()' для преобразования символов в один и тот же регистр перед их сопоставлением. – Barmar

+0

Используйте свой отладчик, чтобы узнать, где происходит ошибка. – Barmar

+2

Редко необходимо писать 'if (condition) status = true; else status = false; '.Просто напишите 'status = condition;'. И поскольку вы просто возвращаете статус, вы можете просто выполнить условие возврата. – Barmar

ответ

1

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

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)

2

Вы можете просто преобразовать две буквы в одни и те же случаи. Не уверен, хотя в каком случае вы хотите вернуть 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. 
}