2016-11-17 42 views
-3

我正在寻找一种将大写字母仅转换为用户输入字符串中的小写字母的方法。问题是我的条件被忽略,每个角色都被改变,而不仅仅是大写字母。为了记录,我也尝试使用atoi将字符转换为整数,但遇到了与上面相同的问题。C中的某个字符串中的某些字符大写C

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

||应该 &&。投票结束为简单的错字。 – Lundin

回答

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; 
} 
+4

这是对[C标准]不支持的ASCII字符集的不当假设(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)。它是不可移植的。每** 5.2.1字符集**,*仅*数字“0” - “9”保证按顺序表示。 –

+0

确实如此,尽管OP似乎想这样做。 :) – user3794667384

+1

@AndrewHenle在实践中,它适用于所有平台。 – Stargateur

6

我建议使用库函数,像islower()isupper()toupper()tolower()这一点。在你的情况,你可以做这样的:

for(i = 0; i < strlen(letter); i++) 
{ 
    letter[i] = tolower(letter[i]); 
} 
+1

欢迎来到Stack Overflow!虽然这可能是一个解决问题的有价值的提示,但一个好的答案也可以说明解决方案。请[编辑]提供示例代码来展示你的意思。或者,可以考虑将其写为注释。 –

+0

感谢您的建议,我将示例添加到了我的答案中。 –

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'并且大于'A'

相关问题