如何在C中小写字符串?

Ton*_*ark 94 c string lowercase

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

Ear*_*rlz 139

它位于标准库中,这是我可以看到实现这种功能的最直接的方式.所以是的,只需遍历字符串并将每个字符转换为小写.

像这样的小事:

#include <ctype.h>

for(int i = 0; str[i]; i++){
  str[i] = tolower(str[i]);
}
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢一个衬垫,那么您可以使用JF Sebastian的这个衬垫:

for ( ; *p; ++p) *p = tolower(*p);
Run Code Online (Sandbox Code Playgroud)

  • `for(;*p; ++ p)*p = tolower(*p);`似乎更惯用. (30认同)
  • @JF你去吧.取决于他们是否希望代码看起来可怕或好看:)(非常易读的一个班轮,但它确实看起来很可怕) (14认同)
  • 我相信一个班轮会让你失去指向字符串的指针。 (4认同)
  • 我相信一个班轮将产生无法估量的影响. (2认同)

Ole*_*aev 7

转换为小写相当于上升位0x60:

for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p;
Run Code Online (Sandbox Code Playgroud)

(当然是拉丁代码页)

  • 这个版本实际上比glibc的`tolower()`慢.在我的机器上55.2对44.15. (6认同)
  • 为了使它更具可读性,你可以做`for(char*p = pstr;*p; ++ p)*p =*p> ='A'&&*p <='Z'?*p | 0x60:*磷;` (4认同)

csc*_*can 7

循环指针以获得更好的性能:

#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;
}
Run Code Online (Sandbox Code Playgroud)