Karışık harfli bir dizeyi C'deki küçük harfli bir dizeye nasıl dönüştürebilirim?
strlwr((char*)str);
Sadece dizenin içinden geçer ve kendisini dönüştürür.
Karışık harfli bir dizeyi C'deki küçük harfli bir dizeye nasıl dönüştürebilirim?
strlwr((char*)str);
Sadece dizenin içinden geçer ve kendisini dönüştürür.
Yanıtlar:
Standart kitaplıkta ve bu, böyle bir işlevi gerçekleştirmenin görebildiğim en basit yolu. Yani evet, sadece dizede döngü yapın ve her karakteri küçük harfe çevirin.
Bunun gibi önemsiz bir şey:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
veya bir astar tercih ediyorsanız, bunu JF Sebastian tarafından kullanabilirsiniz:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
daha deyimsel görünüyor.
char *
, ancak str bir char dizisi değilse değil. Bunun için herhangi bir açıklaman var mı?
küçük harfe dönüştürmek, kendinizi ASCII ile sınırlarsanız, yükselen bit 0x60 ile eşdeğerdir:
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()
. Makinemde 55.2'ye karşı 44.15.
int (*)(int)
. İşte performans ölçümleri için kullanılan kod gist.github.com/370497
Yalnızca ASCII dizeleriyle mi uğraşıyorsunuz ve yerel ayar sorunlarınız yok mu? O zaman evet, bunu yapmanın iyi bir yolu olur.
tolower()
'A' .. 'Z' aralığında değilse bağımsız değişkeni değiştirmeden bırakır.
Küçük harf işlevinde Unicode desteğine ihtiyacınız varsa şu soruya bakın: Light C Unicode Kitaplığı
Kullanmak kadar özensiz davranacaksak, şunu yapın tolower()
:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Ancak, onu bazı semboller / rakamlarla beslerseniz patlar ve genel olarak kötüdür. Yine de iyi röportaj sorusu.