C ++ toupper()不起作用

时间:2015-05-09 20:18:54

标签: c++

我不知道为什么它在我的程序中不起作用。 tolower()正常运行。现在我不知道toupper()是如何工作的,我认为它的作用是tolower()

#include <iostream>
#include <cctype>

int main ()
{
    using namespace std;

    char ch;


    while (ch != '@')
    {
        cin >> ch;

        if (isdigit (ch))
            cout << "";

        else if (isgraph(ch) )
        {
            ch = tolower (ch);
            cout << ch;
        }

        else
        {
            ch = toupper (ch);
            cout << toupper (ch);
        }

    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果字符具有图形符号,则函数std::isgraph返回true。然后,所有可见字符都将true作为此函数的输出,因此所有字符都会tolower。如果所有符号都显示为std::tolower,那么您希望以大写字母显示哪些符号?

检查std::isgraph here

答案 1 :(得分:1)

如果你在程序中输入一个字符,天气是小写字母或大写字母,它将始终以第一个其他语句结束:

else if (isgraph(ch) )
{
    ch = tolower (ch);
    cout << ch;
}

因此,您必须首先检查您的输入是大写/小写。 例如,isupperislower应该会有所帮助。

#include <iostream>
#include <cctype>

int main ()
{
    using namespace std;

    char ch;

    while (ch != '@') {
        cin >> ch;

        if (isdigit (ch)) {
            cout << "this was a digit" << endl;
        }
        else if (isgraph(ch) && isupper(ch)) {
            ch = tolower (ch);
            cout << ch << endl;
        }
        else if (isgraph(ch) && islower(ch))
        {
            ch = toupper (ch);
            cout << ch << endl;
        }
    }
    return 0;
}