Was ist der beste/sauberste Weg, um eine gemischte Groß-/Kleinschreibung in Kleinbuchstaben in C zu konvertieren?c - konvertiert eine gemischte Groß-/Kleinschreibung in Kleinbuchstaben
Antwort
Es ist in der Standardbibliothek, und das ist der einfachste Weg, den ich sehe, um eine solche Funktion zu implementieren. Also, ja, einfach die Zeichenfolge durchlaufen und jedes Zeichen in Kleinbuchstaben konvertieren.
etwas trivial wie folgt aus:
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
oder wenn Sie ein Liner bevorzugen, dann können Sie diese ein von JF Sebastian verwenden:
for (; *p; ++p) *p = tolower(*p);
'für (; * p; ++ p) * p = tolower (* p);' scheint mehr idiomatisch. – jfs
@ J.F. da gehst du. Hängt davon ab, ob der Code unheimlich oder nett aussehen soll :) (sehr gut lesbar, sieht aber beängstigend aus) – Earlz
Das gibt mir einen segfault wenn str ein 'char *' ist, aber nicht wenn str ein char Array ist. Haben Sie eine Erklärung dafür? –
Haben Sie nur mit ASCII-Strings zu tun, und haben keine Probleme mit der Ländereinstellung? Dann, ja, das wäre ein guter Weg, es zu tun.
Was passiert, wenn tolower() auf einem nicht-ASCII-Zeichen aufgerufen wird? mögen '!' oder '#'. Ich testete es auf "#" und es schien in Ordnung zu sein. gilt das generell für alle ASCII-Zeichen, die keine Buchstaben a-z sind? – sepiroth
@hatorade: 'tolower()' lässt das Argument unverändert, wenn es nicht in 'A' .. 'Z' liegt. – jfs
! und # sind beide ASCII-Zeichen. Mark bezog sich auf andere Codierungen wie UTF8, wo man nicht davon ausgehen kann, dass es ein Byte pro Zeichen gibt (wie es diese Lösung tut) – hdgarrood
konvertieren Fall zu senken entspricht Bit steigen 0x60:
for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p;
(für lateinischen Zeichensatz natürlich)
Um es etwas lesbarer zu machen, könntest du 'for (char * p = pstr; * p; ++ p) * p = * p> = 'A' && * p <= 'Z'? * P | 0x60: * p; ' –
Diese Version ist eigentlich langsamer als glibc' tolower() '. 55,2 vs 44,15 auf meiner Maschine. – jfs
ich kann mir das nicht vorstellen: tolower() beschäftigt sich mit chars; nur wenn es Makro ist –
Wenn Sie Unicode-Unterstützung im unteren Fall Funktion diese Frage sehen: Light C Unicode Library
Wenn wir als schlampig sein werden als tolower()
zu verwenden, dies zu tun:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Aber, na ja , es explodiert irgendwie, wenn du es mit Symbolen/Zahlen fütterst, und im Allgemeinen ist es böse. Gute Interviewfrage.
Ja, das wird fold/spindle/mutile eine Vielzahl von Symbolen (in ASCII, jedes Symbol, Steuerzeichen oder Ziffer mit Bit 5 klar wird der gleiche Zeichencode mit Bit 5 gesetzt, usw.) so wirklich, ernst, don ' t es benutzen. –
Dieser Beitrag wird auf [meta] diskutiert (http://meta.stackoverflow.com/questions/270402/is-ghetto-an-offensive-word). –
- 1. Konvertiert jQuery HTML5-Datenattributschlüssel intern in Kleinbuchstaben?
- 2. Konvertieren einer Dezimalzahl in eine gemischte Basisnummer
- 3. Wie konvertiert man String in Großbuchstaben/Kleinbuchstaben in Jinja2?
- 4. Wie konvertiert man die csv in Kleinbuchstaben mit Powershell-Skript
- 5. Wie kann ich benutzerdefinierte Leistungsindikator-Instanznamen automatisch in Kleinbuchstaben konvertiert werden
- 6. grep Spiele zwischen zwei Dateien und konvertiert in Kleinbuchstaben
- 7. Iterative grow eine gemischte Liste in Python
- 8. C# senden gemischte Daten über den Socket
- 9. C - fscanf Gemischte Zahlen und statischen Text
- 10. Wie konvertiert man eine Zeichenkette in eine Ganzzahl in C#
- 11. Python 2.7 Kleinbuchstaben
- 12. Konvertieren von Zeichenfolge in Kleinbuchstaben
- 13. Convert single char in String in Kleinbuchstaben
- 14. C#/EmguCV - Konvertiert eine hochgeladene HttpPostedFileBase in eine Emgu.CV.Mat
- 15. Falsche gemischte Zeichencodierung in XML
- 16. Möglich, eine gemischte überschreiben/anfügen Batch-Schreiben in MySQL?
- 17. Starten eines C# -Klassennamens mit einem Kleinbuchstaben
- 18. auf 2 gemischte Daten Arbeitsrahmen
- 19. Visual C++ 10 Kleinbuchstaben das Makro __FILE__
- 20. Wie konvertiert man eine Eingabezeichenfolge in Großbuchstaben in C#
- 21. Wie konvertiert man ein Recordset in eine Tabelle in C#
- 22. In C#, Wie konvertiert man eine hexadezimale Zeichenfolge in int?
- 23. Wie konvertiert man eine Zeichenfolge in Bits in C#
- 24. Wie konvertiert man Textdatei in Kleinbuchstaben in UNIX (aber in UTF-8)
- 25. Gemischte http/https-Site
- 26. Gemischte Projektlösungen in VS2010-verwaltet und native
- 27. Zähle Kleinbuchstaben in einer Zeichenkette
- 28. Gemischte Sprache Web-Entwicklungsumgebungen
- 29. Regex Großbuchstaben in Kleinbuchstaben
- 30. Dagger 2 gemischte Bereiche
Geht es Ihnen nur um ASCII mit Buchstaben a-z? –
ascii. Wie würde ich das berücksichtigen? Würde das Beispiel unten noch funktionieren? was passiert wenn mein char ein '#' ist und tolower() angerufen wird? – sepiroth
Das wird funktionieren. Ich dachte mehr darüber nach, ob deine Saite Dinge wie é oder Ü enthält. –