C语言 - 将大写字母转换成小写字母

5

一个非常简单的程序。我只想把大写字母'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;  
}

1
“tolower” 能胜任这个工作吗? - gongzhitaao
3
未使用调试器,-1分,请注意if语句中a>=90的部分。 - Shmil The Cat
3
对于任何对这个看起来奇怪的函数定义感到困惑的人,请参见这里 - Bernhard Barker
@Dukeling 我正想发一些关于它的东西 :)) - Maroun
10个回答

23

你在第二部分的 if 条件中出现了错误。应该是 a <= 90

另外,FYI,C 库函数 tolower 已经可以实现这个功能:

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

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

4
请注意,tolower 函数的结果取决于所使用的区域设置。如果你只需要 ASCII 字符集的语义,最好使用 return (c <= 'Z' && c >= 'A') ? c + 32 : c。请注意不要改变原意。 - Craig Barnes

4

对于那些好奇的人,lower(a) int a; 是一种非常古老的函数声明风格。你应该避免使用它,而是使用标准的 int lower(int a) - Spikatrix

4

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

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

2

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

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

您想要的是将一个大写字母转换为小写字母。更好的方法是使用类似于if (a >= 'A' && a <= 'Z')的代码。您不必记住所有ASCII码 :)


1
你可以使用以下位操作将字符从小写转换为大写或反之亦然:
#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;
}

请不要使用这样的“黑科技”。让代码简单明了,易于理解。 - Spikatrix

1
在ASCII码中,大写字母和小写字母相差0x20(在ASCII码中0x20代表空格' '),因此这是另一种方法。
int lower(int a) 
{
    return a | ' ';  
}

我喜欢这个解决方案。非常整洁。 - Hoppo

0

如果条件不正确。还需要返回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,请尝试更改主函数如下:int main() - user1596193

-1
使用这段代码。
#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();
}

-1
#include <stdio.h>
#include <string.h>

int main()
{
    char string[] = "Strlwr in C";

    printf("%s\n",strlwr(string));

    return  0;
}

使用 strlwr 函数将字符串转换为小写


注意:strlwr 是非标准的。如果您希望您的代码具有可移植性,请不要使用它。 - Spikatrix

-2
#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();
}

5
仅仅添加一个答案是不够的。您应该评论为什么这是正确的以及为什么有效。另外,请尝试更好地格式化您的答案。 - parakmiakos

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