在声明结尾处转换为小写?

时间:2013-01-31 19:22:51

标签: c++ character uppercase lowercase

轻微的问题。 (不使用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语句处理小写输入?

3 个答案:

答案 0 :(得分:3)

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

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值,应该表明出现了问题(由您决定如何处理错误处理)。< / p>

此功能的可能用法如下所示:

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

如果问题实际上是关于离开职能范围,那么这个问题也可能有所帮助:
How to break out of a function


具体例子:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

为什么在此代码点将大写字母转换为小写字母   执行,因为第二个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声明之前,则没有任何区别。