Jak mogę przekonwertować ciąg mieszanych wielkości liter na ciąg małych liter w C?
strlwr((char*)str);
Po prostu przechodzi przez ciąg i sam go przekształca.
Jak mogę przekonwertować ciąg mieszanych wielkości liter na ciąg małych liter w C?
strlwr((char*)str);
Po prostu przechodzi przez ciąg i sam go przekształca.
Odpowiedzi:
Znajduje się w bibliotece standardowej i jest to najprostszy sposób, w jaki widzę, aby zaimplementować taką funkcję. Więc tak, po prostu przejrzyj ciąg i zamień każdy znak na małe litery.
Coś tak trywialnego:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
lub jeśli wolisz jedną wkładkę, możesz użyć tej od JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
wydaje się bardziej idiomatyczny.
char *
, ale nie, jeśli str jest tablicą char. Masz na to jakieś wyjaśnienie?
konwersja na małe litery jest równoważna podniesieniu bitu 0x60, jeśli ograniczysz się do ASCII:
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 w porównaniu z 44,15 na moim komputerze.
int (*)(int)
podpis. Oto kod używany do pomiarów wydajności gist.github.com/370497
Czy masz do czynienia tylko z ciągami znaków ASCII i nie masz problemów z lokalizacją? Więc tak, to byłby dobry sposób na zrobienie tego.
tolower()
pozostawia argument niezmieniony, jeśli nie znajduje się w zakresie „A” .. „Z”.
Jeśli potrzebujesz obsługi Unicode w funkcji małych liter, zobacz to pytanie: Light C Unicode Library
Jeśli mamy być tak niechlujni, jak używać tolower()
, zrób to:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Ale cóż, trochę eksploduje, jeśli nakarmisz go jakimiś symbolami / cyframi i ogólnie jest to zło. Dobre pytanie do wywiadu.