如何将字符串设置为全部小写[重复]

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 删除非字母字符。 isuppertolower 仅适用于单个字符,而不适用于字符串。 @Yu Hao 所以没有办法将它应用到字符串? 您需要使用for 来遍历字符串的每个字符,查看***.com/questions/2661766/… 【参考方案1】:

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

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

请注意,当您调用tolower(和toupperisalpha 等)时,您确实需要将输入转换为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] 是什么意思?是不是像 i @user2450044 你可以使用foo[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 循环?认真做点努力吧……

以上是关于如何将字符串设置为全部小写[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python如何定义函数将小写转换为大写

python如何定义函数将小写转换为大写

python如何n-1个数是小写然后全部转换为小写

如何遍历字符串并转换为小写?

字符串比较时如何将Sqlite3设置为不区分大小写?

如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]