如何在 C 中将字符串小写?

如何在 C 中将混合大小写字符串转换为小写字符串?

330464 次浏览

您是否只处理 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()那样草率,请这样做:

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;
}