Làm cách nào để chuyển đổi chuỗi chữ hoa thường thành chuỗi chữ thường trong C?
strlwr((char*)str);
Nó chỉ đi qua chuỗi và tự chuyển đổi nó.
Làm cách nào để chuyển đổi chuỗi chữ hoa thường thành chuỗi chữ thường trong C?
strlwr((char*)str);
Nó chỉ đi qua chuỗi và tự chuyển đổi nó.
Câu trả lời:
Nó nằm trong thư viện chuẩn và đó là cách dễ hiểu nhất mà tôi có thể thấy để triển khai một chức năng như vậy. Vì vậy, có, chỉ cần lặp qua chuỗi và chuyển đổi từng ký tự thành chữ thường.
Một cái gì đó tầm thường như thế này:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
hoặc nếu bạn thích một lớp lót, thì bạn có thể sử dụng lớp lót này của JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
có vẻ thành ngữ hơn.
char *
, nhưng không phải nếu str là một mảng char. Có bất kỳ lời giải thích cho điều đó?
để chuyển đổi thành chữ thường tương đương với bit tăng 0x60 nếu bạn tự giới hạn 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 so với 44,15 trên máy của tôi.
int (*)(int)
chữ ký. Dưới đây là đoạn mã được sử dụng để đo lường hiệu suất gist.github.com/370497
Bạn chỉ xử lý các chuỗi ASCII và không có vấn đề về ngôn ngữ? Sau đó, có, đó sẽ là một cách tốt để làm điều đó.
tolower()
không thay đổi đối số nếu nó không nằm trong phạm vi 'A' .. 'Z'.
Nếu bạn cần hỗ trợ Unicode trong hàm viết thường, hãy xem câu hỏi này: Thư viện Light C Unicode
Nếu chúng ta sử dụng cẩu thả tolower()
, hãy làm như sau:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Nhưng, tốt, nó sẽ phát nổ nếu bạn cho nó ăn một số ký hiệu / chữ số, và nói chung là nó xấu xa. Tuy nhiên, câu hỏi phỏng vấn hay.