Wie kann ich eine gemischte Zeichenfolge in eine Kleinbuchstabenzeichenfolge in C konvertieren?
strlwr((char*)str);
Es geht einfach durch den String und konvertiert ihn selbst.
Wie kann ich eine gemischte Zeichenfolge in eine Kleinbuchstabenzeichenfolge in C konvertieren?
strlwr((char*)str);
Es geht einfach durch den String und konvertiert ihn selbst.
Antworten:
Es befindet sich in der Standardbibliothek und ist der einfachste Weg, eine solche Funktion zu implementieren. Also ja, durchlaufen Sie einfach die Zeichenfolge und konvertieren Sie jedes Zeichen in Kleinbuchstaben.
Etwas Triviales wie dieses:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
oder wenn Sie einen Liner bevorzugen, können Sie diesen von JF Sebastian verwenden:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
scheint idiomatischer.
char *
, aber nicht, wenn str ein char-Array ist. Hast du eine Erklärung dafür?
Das Konvertieren in Kleinbuchstaben entspricht dem Anstiegsbit 0x60, wenn Sie sich auf ASCII beschränken:
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 auf meiner Maschine.
int (*)(int)
Signatur. Hier ist der Code für Leistungsmessungen gist.github.com/370497
Beschäftigen Sie sich nur mit ASCII-Zeichenfolgen und haben keine Probleme mit dem Gebietsschema? Dann ja, das wäre ein guter Weg, es zu tun.
tolower()
das Argument unverändert, wenn es nicht im Bereich 'A' .. 'Z' liegt.
Wenn Sie Unicode-Unterstützung in Kleinbuchstaben benötigen, lesen Sie diese Frage: Light C Unicode Library
Wenn wir so schlampig wie möglich sein wollen tolower()
, tun Sie Folgendes:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Aber es explodiert irgendwie, wenn Sie ihm einige Symbole / Ziffern geben, und im Allgemeinen ist es böse. Gute Interviewfrage.