【问题标题】:I'm having trouble with a bool function where the user enters two letters and it outputs which letter is highest on the alphabet我在使用 bool 函数时遇到问题,用户输入两个字母并输出字母表中最高的字母
【发布时间】:2017-06-07 11:57:51
【问题描述】:

我是学习函数的新手,我基本上是在为大学做一个练习,用户输入两个字母,例如 j,然后字母 1 高于字母表中的字母 2,反之亦然。它必须是一个布尔函数,这是问题所在。

4。 一种。为函数 IsAlphaHigher 编写一个原型,该函数可以传递一对 字符,这将返回一个布尔值,指示是否 第一个字符按字母顺序较高。 (注意“a”高于“z”) 湾。为函数 IsAlphaHigher 写一个定义 C。编写一个将使用 IsAlphaHigher 函数的测试应用程序。

现在,如果用户输入类似 n 或大写字母 A N 之类的内容,这很容易。 ASCII 表中最低的字母在字母表中更高。但是当用户输入大写字母 R 小写 a 时,ASCII 表中的大写 R 是 82,而小 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;
}

当我构建它时,它说没有错误,但是当我进入命令 shell 并输入两个字母时,它给了我一个“运行时检查失败 #3 T” 我不知道为什么。

这是我的第一个布尔函数,所以我想我做错了什么,任何关于我哪里出错的提示将不胜感激。

【问题讨论】:

  • 您可以使用toupper()tolower() 将字符转换为相同大小写,然后再进行比较。
  • 使用调试器查看错误发生的位置。
  • 很少需要写if (condition) status = true; else status = false;。只需写status = condition;。而且由于您只是返回status,因此您可以执行return condition
  • if (letterOne &gt; 90 &amp;&amp; letterTwo &lt; 90) 那么你可以保证(letterOne &lt; letterTwo) 是假的。另外,请注意输入字母的方式。如果您在字母之间放置一个空格或在字母之间按Enter,这与两个连续的字母不同。
  • @WillMannix 我猜你可能已经看到一些使用BOOL 的旧式代码,其中FALSE == 0TRUE == 1。但严格来说,任何非零值都意味着真实; only 零表示错误。所以严格来说if (booleanValue == 1) ... 是一个微妙的错误。而是直接写if (booleanValue) ...(不管类型是BOOL还是bool)。

标签: c++ function char boolean runtime-error


【解决方案1】:

在进行比较之前,只需将所有字母转换为大写或小写即可。 如果需要保留大小写,请创建临时变量进行比较

【讨论】:

    【解决方案2】:
    #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');
    }
    

    希望这可以帮助您理解,玩转这段代码,看看它是否对您有所帮助。

    编辑: 您可能希望在程序中添加错误检查,以确保给您一个字母而不是一个符号。查看http://www.asciitable.com/ 以获得正确的号码。 (65 - 90 和 97 - 122)

    【讨论】:

      【解决方案3】:

      您可以先将两个字母转换为相同的大小写。不确定您要返回哪种情况。

      bool IsAlphaHigher(char letterOne, char letterTwo)
      {
      
          if (letterOne > 90) letterOne -= 32;
          if (letterTwo > 90) letterTwo -= 32;
      
          return letterOne > letterTwo;  // true if letterOne is higher.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 2021-07-23
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多