Bagaimana cara mengubah string kasus campuran menjadi string huruf kecil di C?
strlwr((char*)str);
Itu hanya melewati string dan mengubahnya sendiri.
Bagaimana cara mengubah string kasus campuran menjadi string huruf kecil di C?
strlwr((char*)str);
Itu hanya melewati string dan mengubahnya sendiri.
Jawaban:
Ada di pustaka standar, dan itulah cara paling mudah yang dapat saya lihat untuk mengimplementasikan fungsi seperti itu. Jadi ya, cukup putar melalui string dan ubah setiap karakter menjadi huruf kecil.
Sesuatu yang sepele seperti ini:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
atau jika Anda lebih suka satu liner, maka Anda dapat menggunakan yang ini dari JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
tampaknya lebih idiomatis.
char *
, tetapi tidak jika str adalah array char. Punya penjelasan untuk itu?
untuk mengonversi ke huruf kecil sama dengan bit naik 0x60 jika Anda membatasi diri Anda pada 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 vs. 44.15 di komputer saya.
int (*)(int)
tanda tangan. Berikut kode yang digunakan untuk pengukuran kinerja gist.github.com/370497
Apakah Anda hanya berurusan dengan string ASCII, dan tidak memiliki masalah lokal? Kalau begitu ya, itu cara yang bagus untuk melakukannya.
tolower()
membiarkan argumen tidak berubah jika tidak ada dalam kisaran 'A' .. 'Z'.
Jika Anda memerlukan dukungan Unicode dalam fungsi huruf kecil, lihat pertanyaan ini: Light C Unicode Library
Jika kita akan menjadi ceroboh dalam menggunakan tolower()
, lakukan ini:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Tapi, yah, itu agak meledak jika Anda memberinya beberapa simbol / angka, dan secara umum itu jahat. Pertanyaan wawancara yang bagus.