【问题标题】:C - Convert an uppercase letter to lowercaseC - 将大写字母转换为小写字母
【发布时间】:2013-03-29 18:00:24
【问题描述】:

一个非常简单的程序。我只是想把'A'变成'a',但输出给了我'A'。

#include <stdio.h>

int main(void) {
    putchar(lower('A')); 

}

lower(a) 
int a; 
{
    if ((a >= 65) && (a >= 90))
        a = a + 32; 
    return a;  
}

【问题讨论】:

  • tolower 会做这项工作吗?
  • 哦.. 哈哈哈谢谢...
  • -1 表示不使用调试器,另请参阅 if 的 a>=90 部分
  • 对于任何想知道看似奇怪的函数定义的人 - 请参阅this
  • @Dukeling 我正要发布一些关于它的内容:))

标签: c


【解决方案1】:

您搞砸了if 条件的第二部分。那应该是a &lt;= 90

另外,仅供参考,有一个 C 库函数 tolower 已经这样做了:

#include <ctype.h>
#include <stdio.h>

int main() {
    putchar(tolower('A'));
}

【讨论】:

  • 请注意,tolower 是依赖于语言环境的。如果你知道你只想要 ASCII 语义,最好使用return (c &lt;= 'Z' &amp;&amp; c &gt;= 'A') ? c + 32 : c
【解决方案2】:

我相信你想要

lower(a) 
int a; 
{
    if ((a >= 65) && (a <= 90))
        a = a + 32; 
    return a;  
}

虽然 tolower 可能只会为您省去麻烦,除非您想自己这样做。 http://www.cplusplus.com/reference/cctype/tolower/

【讨论】:

  • 对于那些想知道的人,lower(a) int a; 是一种非常古老的函数声明风格。你应该避免它,而是使用标准的int lower(int a)
【解决方案3】:

在 ASCII 中,大写和小写字母之间的距离是 0x20,所以这是另一种方法。

int lower(int a) 
{
    if ((a >= 0x41) && (a <= 0x5A))
        a |= 0x20; 
    return a;  
}

【讨论】:

    【解决方案4】:

    确保它正确的一种方法是使用字符而不是 ascii 代码。

    if ((a >= 65) && (a <= 90))
    

    你想要的是降低大小写。最好使用类似 if (a &gt;= 'A' &amp;&amp; a &lt;= 'Z') 的东西。你不必提醒所有的ASCII码:)

    【讨论】:

      【解决方案5】:

      您可以使用位操作将字符从小写转换为大写,反之亦然,如下所示:

      #include<stdio.h>
      int main(){
        char c;
        printf("Enter a character in uppercase\n");
        scanf("%c",&c);
        c|=' '; // perform or operation on c and ' '
        printf("The lower case of %c is \n",c);
        c&='_'; // perform 'and' operation with '_' to get upper case letter. 
        printf("Back to upper case %c\n",c);   
        return 0;
      }
      

      【讨论】:

      • 请不要使用这样的“黑客”。让代码简单易懂
      【解决方案6】:

      在 ASCII 中,大写和小写字母是 0x20(在 ASCII 中 0x20 是空格 ' ')彼此分开,所以这是另一种方法。

      int lower(int a) 
      {
          return a | ' ';  
      }
      

      【讨论】:

      • 我喜欢这个解决方案。非常整洁。
      【解决方案7】:

      如果条件错误。还需要 lower 的返回类型。

      #include <stdio.h>
      
      int lower(int a)  
      {
          if ((a >= 65) && (a <= 90))
              a = a + 32; 
          return a;  
      }
      
      int _tmain(int argc, _TCHAR* argv[])
      {
      
          putchar(lower('A')); 
          return 0;
      }
      

      【讨论】:

      • 这是在 VC++ 中,如果你使用 gcc,请尝试更改 main 如下: int main()
      【解决方案8】:
      #include <stdio.h>
      #include <string.h>
      
      int main()
      {
          char string[] = "Strlwr in C";
      
          printf("%s\n",strlwr(string));
      
          return  0;
      }
      

      使用 strlwr 降低大小写

      【讨论】:

      • 注意:strlwr 是非标准的。如果您希望代码可移植,请不要使用它。
      【解决方案9】:

      使用此代码

      #include<stdio.h>
      #include<conio.h>
      #include<stdlib.h>
      void main(){
      char a[10];
      clrscr();
      gets(a);
      int i,length=0;
      for(i=0;a[i]!='\0';i++)
      length+=1;
      for(i=0;i<length;i++){
      a[i]=a[i]^32;
      }
      printf("%s",&a);
      getch();
      }
      

      【讨论】:

        【解决方案10】:
        #include<stdio.h>
        
        void main()
        {
         char a;
        
         clrscr();
         printf("enter a character:");
         scanf("%c",&a);
        
         if(a>=65&&a<=90)
           printf("%c",a+32);
         else
           printf("type a capital letter");
        
         getch();
        }
        

        【讨论】:

        • 添加答案是不够的。您应该评论为什么这是正确的以及为什么会这样。也尝试更好地格式化你的答案。