如何将字符串设置为全小写

时间:2013-06-04 03:20:21

标签: c uppercase lowercase tolower toupper

我有char foo[SIZE]; //(string)

并使用%s(正如其中printfs正确的输入)正确输入了它,但现在想要将其设置为小写。所以我尝试使用

 if (isupper(*foo)) 
   *foo=tolower(*foo); 

即我做的时候:

printf("%s" foo); //I get the same text with upper case

文字似乎没有改变。谢谢。

3 个答案:

答案 0 :(得分:5)

foo不是指针,因此您不希望将其用作指针。在使用tolower之前,您也不必检查字符是否为大写字母 - 它将大写字母转换为小写字母,并保持其他字符不变。你可能想要这样的东西:

for (i=0; foo[i]; i++)
    foo[i] = tolower((unsigned char)foo[i]);

请注意,当您致电tolower(以及toupperisalpha等)时,您确实需要将输入转发给unsigned char。否则,基本英语/ ASCII字符集之外的许多(大多数?)字符将经常导致未定义的行为(例如,在典型情况下,大多数重音字符将显示为负数)。

顺便说一句,当你正在阅读字符串时,你不想将scanf%s一起使用 - 你总是想要指定字符串长度,例如:{{1假设scanf("%19s", foo); == 20(即,您希望指定一个小于大小。或者,您可以使用SIZE,例如fgets。请注意fgets(foo, 20, infile); },你指定缓冲区的大小,而不是像fgets那样(和像fscanf这样的公司)。

答案 1 :(得分:3)

试试这个

for(i = 0; foo[i]; i++){
  foo[i] = tolower(foo[i]);
}

答案 2 :(得分:3)

*foo=tolower(*foo); //doing *(foo+i) or foo[i] does not work either

因为所有这些选项都没有意义

您应该像这样使用它:

for(i = 0; foo[i] != '\0'; i++){
    foo[i] = tolower(foo[i]);
}