在C++中将小写字符转换为大写字符

10

这是我写的代码。当我输入小写字符,比如 'a',它给我一个空白字符,但之后它正常工作。你能告诉我我做错了什么吗?谢谢。 :)

#include <iostream>
#include <string>
using namespace std;

int main()
{
    char letter;

    cout << "You will be asked to enter a character.";
    cout << "\nIf it is a lowercase character, it will be converted to uppercase.";
    cout << "\n\nEnter a character. Press . to stop: ";

    cin >> letter;

    if(islower(letter))
    {
        letter = isupper(letter);
        cout << letter;
    }

    while(letter != '.')
    {
        cout << "\n\nEnter a character. Press . to stop: ";
        cin >> letter;

        if(islower(letter))
        {
            letter = toupper(letter);
            cout << letter;
        }
    }

    return 0;
}

2
因为你第一次打印了一个布尔值。 - herohuyongtao
2
你认为这段代码会做什么?letter = isupper(letter); cout << letter;isupper 可能返回什么值,它在 ASCII 中对应什么? - juanchopanza
请问您能告诉我如何修改我的代码吗? - Manisha Singh Sanoo
谢谢大家,这是我犯的一个愚蠢的错误。我以为我已经将isupper()修改为toupper()了,但实际上只修改了其中一部分。哈哈,谢谢。 :) - Manisha Singh Sanoo
6个回答

12

因为你在第一次打印时输出了一个bool值(即false,也就是在此处的NUL字符),所以你应该进行更改。

letter = isupper(letter);

letter = toupper(letter);

2

请看这里:

if(islower(letter))
{
    letter = isupper(letter);
    cout << letter;
}

如果字符是小写的,那么您将其分配给了isupper的返回值。这应该是0。所以你打印一个空字符。
为什么不对您输入的每个字符调用toupper呢?如果它是小写的,它将被转换,如果它已经是大写的,则不会执行任何操作。

哦,哇,我没想到会这样哈哈。谢谢大家。 :) - Manisha Singh Sanoo

1
通常来说,将小写字符转换为大写字符,只需要从小写字符中减去32,因为这个数字是大写和小写字符之间的ASCII码差异,例如,'a'-'A'=97-67=32
char c = 'b';
c -= 32; // c is now 'B'
printf("c=%c\n", c);

另一种简单的方法是首先将小写字符映射到英文字母范围内的偏移量0-25,即'a'是索引'0','z'是索引'25'(包括),然后重新映射为大写字符。
char c = 'b';
c = c - 'a' + 'A'; // c is now 'B'
printf("c=%c\n", c);

0

如果您想要自己的算法:

#include<iostream>
#include<string>

using namespace std;

int main()
{
    char ch = '/0';
    string input("Hello, How Are You ?");
    for(size_t i=0; i<input.length(); i++)
    {
        if(input[i]>=97 && input[i]<=122)
        {
            ch=input[i]-32;
        }
        else
        {
            ch = input[i];
        }
        cout << ch;
    }

  return 0;
}

0
在`letter = isupper(letter);`这行代码中,你检查变量`letter`是否为大写字母,如果要将其转换为大写字母,你必须使用函数`toupper()`。
letter = toupper(letter);

你的回答相比其他回答有什么价值? - GSerg

0
#include <iostream>
using namespace std;

main()
{
    string name ;
    cout<<"Lower Case:  ";
    cin>>name;
    int  size_of_string = name.size(); // to detrmine the looping times
    cout<<"Upper case:  ";

    for(int i = 0 ,n = size_of_string ; i < n ; i++)
    {
        //check if the str[i] is lowercase 
        if(name[i]  >= 'a' && name[i]<='z' )
        {
            //convert the Lowercase to uppercase via ASCI Chart
            char a = name[i] - 32 ;
            cout<<a;
        }

        //the user input was upperCase 
        else
        cout<<name[i];
    }

    cout<<"\n Good Bye!"<<endl;
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接