【问题标题】:Changing a lowercase character to uppercase in c++在c ++中将小写字符更改为大写
【发布时间】:2014-04-20 23:21:55
【问题描述】:

这是我写的代码。当我输入诸如“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;
}

【问题讨论】:

  • 因为你第一次打印一个bool值。
  • 您希望这能做什么? letter = isupper(letter); cout &lt;&lt; letter;isupper 可以返回什么,在 ASCII 中对应什么?
  • 你能告诉我应该如何修改我的代码吗?
  • 谢谢大家,这是我犯的一个愚蠢的错误。我以为我将两个部分的 isupper() 修改为 toupper() 。哈哈谢谢。 :)

标签: c++ uppercase lowercase toupper


【解决方案1】:

因为您第一次打印了bool 值(即false,又名NUL character)。

你应该改变

letter = isupper(letter);

letter = toupper(letter);

【讨论】:

    【解决方案2】:

    看这里:

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

    如果字符较小,则您为其分配了返回值isupper。那应该是 0。所以你打印一个空字符。

    您为什么不为您输入的每个字符调用toupper?如果它低于它会转换它,如果它已经高于它不会做任何事情。

    【讨论】:

    • 哦,哇,我没想到那样大声笑。谢谢大家。 :)
    【解决方案3】:

    一般来说,将小写字符转换为大写字符,只需将小写字符减去 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);
    

    【讨论】:

      【解决方案4】:

      如果您想要自己的算法:

      #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;
      }
      

      【讨论】:

        【解决方案5】:

        letter = isupper(letter);中,检查变量letter是否大写,将其转换为大写必须使用函数toupper()

        letter = toupper(letter);
        

        【讨论】:

        • 你的答案比其他答案有什么价值?
        【解决方案6】:
        #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;
        }
        

        【讨论】:

          猜你喜欢
          • 2019-07-20
          • 2011-10-06
          • 2021-03-30
          • 2014-02-04
          • 1970-01-01
          • 1970-01-01
          • 2012-01-03
          • 2023-04-05
          • 2015-07-15
          相关资源
          最近更新 更多