如何在C?中将混合大小写字符串转换为小写字符串?
答案 0 :(得分:131)
它位于标准库中,这是我可以看到实现这种功能的最直接的方式。所以是的,只需遍历字符串并将每个字符转换为小写。
像这样微不足道的事情:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
或者如果您更喜欢一个衬垫,那么您可以使用J.F.Sebastian的这个衬垫:
for ( ; *p; ++p) *p = tolower(*p);
答案 1 :(得分:6)
转换为小写相当于上升位0x60:
for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p;
(当然是拉丁代码页)
答案 2 :(得分:1)
您是刚刚处理ASCII字符串,并且没有区域设置问题?那么是的,这将是一个很好的方法。
答案 3 :(得分:1)
如果在小写函数中需要Unicode支持,请参阅以下问题: Light C Unicode Library
答案 4 :(得分:1)
如果我们要像使用tolower()
一样草率,请执行此操作:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
但是,如果你喂它一些符号/数字,它有点爆炸,一般来说它是邪恶的。不过,这是一个很好的面试问题。
答案 5 :(得分:1)
环绕指针以获得更好的性能:
#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;
}