Answers:
它在标准库中,这是实现这种功能的最直接的方法。因此,是的,只需遍历字符串并将每个字符转换为小写即可。
像这样的琐碎的事情:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
或者,如果您喜欢一种衬板,则可以使用JF Sebastian的这种衬板:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
似乎更惯用。
char *
,这会给我一个段错误,但是如果str是一个char数组则不会。有什么解释吗?
如果将自己限制为ASCII,则转换为小写字母等效于上升位0x60:
for(char *p = pstr; *p; ++p)
*p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
for(char *p = pstr;*p;++p) *p=*p>='A'&&*p<='Z'?*p|0x60:*p;
tolower()
。我的机器上是55.2与44.15。
int (*)(int)
签名。这是用于性能测量的代码gist.github.com/370497
您只是在处理ASCII字符串,而没有语言环境问题吗?那是的,那将是一个很好的方法。
tolower()
如果参数不在'A'..'Z'范围内,则保持不变。
如果在小写功能中需要Unicode支持,请参见以下问题: Light C Unicode库