在语句末尾转换为小写

Converting to lowercase at end of statement?

本文关键字:转换 语句      更新时间:2023-10-16

轻微问题。(不使用 toupper() 和 tolower() 函数)我了解使用数值转换为大写和小写是什么,但是按照我C++书,为什么转换是在此语句的末尾而不是之前?

if (letter >= 'A')  //test for 'A' or larger
    if (letter <= 'Z')  //test for 'Z' or smaller
    {
        cout << endl
             << "You entered a capital letter."
             << endl;
        letter += 'a' - 'A'; //Convert to lowercase
        return 0;
    }
if (letter >= 'a') //test for 'a' or larger
{
    if (letter <= 'z') //test for 'z' or smaller
    {
    cout << endl
         << "You entered a small letter."
         << endl;
    return 0;
    }
}

为什么它会在代码执行的这一点上将大写转换为小写,因为第二个 if 语句处理小写输入?

给定的代码片段可以是函数的主体:

int convert(char& letter)
{
    if (letter >= 'A' && letter <= 'Z')
    {
        letter += 'a' - 'A';
        return 0; // go out of this function...
    }
    else if (letter >= 'a' && letter <= 'z')
    {
        letter += 'A' - 'a';
        return 0; // go out of this function...
    }
    return -1; // it wasn't a letter as we expected
}

请注意,有一条可能的路径与这两种情况都不匹配。假设letter'?',因为您返回的是int值,因此应该有一个指示,表明出了问题(这取决于您如何处理错误处理)。

此函数的可能用法可能如下所示:

char letter = '!';
if (convert(letter) == 0)
    // success ...
else
    // error ...

如果问题真的是关于离开功能范围,那么这个问题也可能有所帮助:
如何突破函数


具体例子:

void convertLetterAndPrintResult(char& letter)
{
    if (convert(letter) == 0)
        std::cout << letter << std::endl;
    else
        std::cout << "ERROR: '" << letter << "' is not valid character!" << std::endl;
}
int main()
{
    char letter = '!';
    convertLetterAndPrintResult(letter);
    letter = 'g';
    convertLetterAndPrintResult(letter);
    letter = 'L';
    convertLetterAndPrintResult(letter);
}

输出:

ERROR: '!' is not valid character!
G
l

因为第一部分有一个return 0;语句。如果原始字符是大写的,则控制流甚至不会到达第二个嵌套if () { if () { } }部分。

为什么它会在代码点将大写转换为小写 自第二个 if 语句处理小写输入以来的执行?

那是因为

return 0

表示函数已完成。线条

if (letter >= 'a') //test for 'a' or larger
{
    if (letter <= 'z') //test for 'z' or smaller
    {
    cout << endl
         << "You entered a small letter."
         << endl;
    return 0;
    }
}

如果字母最初是大写字母,则不会执行。它会打印出"您输入了一个大写字母",然后将其转换为小写,然后退出。

为什么转换是在此语句的末尾而不是之前?

如果转换在 cout 语句之前,则没有区别。