如何在 C 中将混合大小写字符串转换为小写字符串?
您是否只处理 ASCII 字符串,并且没有区域设置问题?那么是的,这是一个很好的方法。
它在标准库中,这是我能看到的实现这种函数的最直接的方法。所以是的,只要循环遍历字符串并将每个字符转换为小写即可。
像这样琐碎的事情:
#include <ctype.h> for(int i = 0; str[i]; i++){ str[i] = tolower(str[i]); }
或者如果你更喜欢一句话,那么你可以用 J.F. 塞巴斯蒂安的这句话:
for ( ; *p; ++p) *p = tolower(*p);
转换为小写等于上升位0x60,如果你限制自己为 ASCII:
for(char *p = pstr; *p; ++p) *p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
如果您需要小写函数中的 Unicode 支持,请参阅下面的问题: Light C Unicode 库
如果我们要像使用 tolower()那样草率,请这样做:
tolower()
char blah[] = "blah blah Blah BLAH blAH\0"; int i = 0; while( blah[i] |=' ', blah[++i] ) {}
但是,如果你给它输入一些符号或数字,它就会爆炸一般来说,它是邪恶的。问得好。
循环指针以获得更好的性能:
#include <ctype.h> char* toLower(char* s) { for(char *p=s; *p; p++) *p=tolower(*p); return s; } char* toUpper(char* s) { for(char *p=s; *p; p++) *p=toupper(*p); return s; }