如何将字符串设置为全部小写[重复]
Posted
技术标签:
【中文标题】如何将字符串设置为全部小写[重复]【英文标题】:How to set a string to all lowercase [duplicate] 【发布时间】:2013-05-30 08:17:28 【问题描述】:我有一个char foo[SIZE]; //(string)
并已使用%s
正确输入(如printfs
中的正确输入),但现在想将其设置为小写。所以我尝试使用
if (isupper(*foo))
*foo=tolower(*foo);
当我这样做时:
printf("%s" foo); //I get the same text with upper case
文本似乎没有改变。谢谢你。
【问题讨论】:
您可以使用isalpha
删除非字母字符。
isupper
和 tolower
仅适用于单个字符,而不适用于字符串。
@Yu Hao 所以没有办法将它应用到字符串?
您需要使用for
来遍历字符串的每个字符,查看***.com/questions/2661766/…
【参考方案1】:
foo
不是指针,因此您不想将其用作指针。在使用tolower
之前,您也不必检查字符是否为大写字母——它将大写转换为小写,而其他字符保持不变。你可能想要这样的东西:
for (i=0; foo[i]; i++)
foo[i] = tolower((unsigned char)foo[i]);
请注意,当您调用tolower
(和toupper
、isalpha
等)时,您确实需要将输入转换为unsigned char
。否则,基本英语/ASCII 字符集之外的许多(大多数?)字符将经常导致未定义的行为(例如,在典型情况下,大多数重音字符将显示为负数)。
顺便说一句,当您读取字符串时,您不想将scanf
与%s
一起使用——您总是希望指定字符串长度,例如:scanf("%19s", foo);
,假设@987654331 @ == 20(即,您希望指定比大小小一。或者,您可以使用fgets
,如fgets(foo, 20, infile);
。请注意,使用fgets
,您指定缓冲区的大小,而不是小一您可以使用 scanf
(以及 fscanf 之类的公司)。
【讨论】:
+1 表示“aside....
”部分【参考方案2】:
试试这个
for(i = 0; foo[i]; i++)
foo[i] = tolower(foo[i]);
【讨论】:
for 循环中间的 foo[i] 是什么意思?是不是像 ifoo[i] != '\0'
,但不能使用i <'\0'
。【参考方案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]);
【讨论】:
中间的 foo[i] 是什么意思? NULL 或\0
??我认为\0
更好,因为它是一个字符数组。
@Bill 你是对的。谢谢
好的,现在为答案 +1 :)
@user2450044 曾经读过 C 中的 for 循环?认真做点努力吧……以上是关于如何将字符串设置为全部小写[重复]的主要内容,如果未能解决你的问题,请参考以下文章