在C中用字符串中的某些字符大写

时间:2016-11-17 14:38:05

标签: c string char

我正在寻找一种方法,只将大写字母转换为用户输入字符串的小写字母。问题是我的条件被忽略了,每个字符都被改变了,而不仅仅是大写字母。为了记录,我还尝试使用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;
}

3 个答案:

答案 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;
}