我正在寻找一种方法,只将大写字母转换为用户输入字符串的小写字母。问题是我的条件被忽略了,每个字符都被改变了,而不仅仅是大写字母。为了记录,我还尝试使用atoi将字符转换为int,但遇到了与上面相同的问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char letter[100];
scanf("%s", letter);
int i;
for(i=0; letter[i]!='\0'; i++){
if((letter[i]>='A')||(letter[i]<='Z')){
letter[i]=letter[i]+32;
}
}
printf("%s", letter);
return 0;
}
答案 0 :(得分:6)
我建议使用库函数,例如islower()
,isupper()
,toupper()
和tolower()
。在你的情况下,你可以这样做:
for(i = 0; i < strlen(letter); i++)
{
letter[i] = tolower(letter[i]);
}
答案 1 :(得分:4)
您可以改为使用tolower()
功能:
#include <ctype.h>
for(i = 0; i < strlen(letter); i++){
letter[i] = tolower(letter[i]);
}
tolower()
函数将大写字母转换为小写字母。请注意,要使用它,您必须包含ctype.h
。
否则,代码的问题在于您使用的是||
而不是&&
。如果字母小于'Z'
或大于'A'
,则您正在测试,这始终是真的。您想要做的是测试它是否在'Z'
和'A'
之间,这意味着您应该测试它是否小于'Z'
且大于{{ 1}}。
答案 2 :(得分:3)
问题在于你说
if((letter[i]>='A')||(letter[i]<='Z')){
letter[i]=letter[i]+32;
}
而不是
if((letter[i]>='A')&&(letter[i]<='Z')){
letter[i]=letter[i]+32;
}