Foren

Mac C++ String-Klasse - Groß-/Kleinschreibung nicht beachten?

T

schmelzen

Originalplakat
4. Dezember 2006
Katy, Texas
  • 8. Juni 2007
Ich habe in einer Online-Referenz (cppreference.com) und in meinem C++-Buch nachgesehen, kann aber kein string-unempfindliches Compare() finden. Es gibt sicherlich C-String-Vergleiche, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird, aber ich würde lieber einen C++-Vergleich verwenden, wenn es einen gibt.

(Außerdem bin ich jetzt auf der Mission, es zu finden ...)

Danke, Todd T

schmelzen

Originalplakat
4. Dezember 2006


Katy, Texas
  • 8. Juni 2007
Ich schätze, ich könnte ein Bitset ODER mit einer bekannten längeren Zeichenfolge aller Leerzeichen (X'20') verwenden und dann auf einen Kleinbuchstabenvergleich testen ...

Aha

25. Oktober 2004
  • 8. Juni 2007
Es ist fast unglaublich, aber ich glaube nicht, dass die Standardbibliothek von C++ keine Groß-/Kleinschreibung hat.

Wenn Sie sich nicht um Gebietsschemas kümmern möchten oder müssen, gehen Sie wie folgt vor:
_stricmp( str1.c_str(), str2.c_str() )
Ist die einfachste Lösung (auch ziemlich effizient).

Gebietsschemata verkomplizieren die Dinge ziemlich (nun, es sind wirklich die Mängel der Standardbibliothek, die dies so kompliziert machen).
Mal sehen, ob ich einen Link für etwas finden kann, das sich mit Gebietsschemas befasst...
Hier ist eins: http://lafstern.org/matt/col2_new.pdf
Ich weiß nicht, ob er wirklich weiß, wovon er redet, aber es hört sich so an. Er fährt noch eine Weile damit fort, damit Sie das Problem verstehen können, aber Sie können zum Ende springen und sich den letzten Codeblock für seine beste Lösung ansehen. T

schmelzen

Originalplakat
4. Dezember 2006
Katy, Texas
  • 9. Juni 2007
Danke iSee. Ja, wahrscheinlich hat er recht. Für meine Zwecke werde ich jedoch mit 7-Bit-ASCII-Zeichencodes arbeiten, und ich denke, dieser Codeblock wird gut genug sein.

Danke für die Bestätigung - schön zu sehen, dass ich sie nicht nur verpasst habe.

Todd

Code: |_+_| T

schmelzen

Originalplakat
4. Dezember 2006
Katy, Texas
  • 10. Juni 2007
iSee sagte: Wenn Sie sich nicht um Gebietsschemas kümmern möchten oder müssen, dann:
_stricmp( str1.c_str(), str2.c_str() )
Ist die einfachste Lösung (auch ziemlich effizient).

OK ich gebe auf. Wo bist du drauf gekommen _stricmp ?

Todd IN

wittegijt

18.02.2007
Eindhoven
  • 11. Juni 2007
toddburch sagte: OK, ich gebe auf. Wo bist du drauf gekommen _stricmp ?

Todd

Es ist eine Windows-Sache. Unix-Bibliotheken verwenden strcasecmp, es ist in .

Wittegijt.

Aha

25. Oktober 2004
  • 11. Juni 2007
toddburch sagte: OK, ich gebe auf. Wo bist du drauf gekommen _stricmp ?

Todd

OK, tut mir leid, dass ich das rausgeworfen habe.

Ich dachte, es wäre Teil der Standard-C-Bibliothek, aber das ist es nicht. Es erscheint nur inoffiziell unter verschiedenen Namen in verschiedenen Implementierungen der C-Bibliothek. Ein Vergleich, bei dem die Groß-/Kleinschreibung nicht beachtet wird, ist also auch kein offizieller Bestandteil der offiziellen C-Bibliothek. Meine Güte. Es scheint ein so großes Versäumnis zu sein. Unter VS ist es _stricmp() oder stricmp(), unter CodeWarrior für Mac ist es stricmp() oder strcasecmp() und unter OS X 10.4/Xcode ist es strcasecmp().

Wenn ich darüber nachdenke, hätte mir der führende Unterstrich den Hinweis geben sollen.

Ich denke, wenn Sie dem C-Standard entsprechen möchten, müssen Sie Ihren eigenen mit tolower() (oder toupper()) in einer Schleife implementieren.

Mal sehen, wie ein erster Durchgang aussehen könnte (Das ist aus dem Kopf, NICHT getesteter Code):
Code: |_+_|
Wie auch immer, sorry für den schlechten Rat. Ich schätze, ich habe seit den CodeWarrior-Tagen nicht wirklich viel C/C++-Codierung unter Mac OS X gemacht, wo ich die Betriebssystem-API (CFString usw.) vermeiden wollte... T

schmelzen

Originalplakat
4. Dezember 2006
Katy, Texas
  • 11. Juni 2007
Ahhhha. Macht Sinn. Danke Wittegijt & iSee. Ich habe meine 'Enzyklopädie C' (Sybex, 1991) gelesen und alle (oder zumindest viele) der nicht standardmäßigen Schlüsselwörter von Microsoft haben alle einen Unterstrich für das erste Zeichen. Hätte mir einen Tipp geben sollen.

Okay, jetzt zu strcasecmp() . Die Website cppreference.com, die ich verwende, scheint nur Standard-C/C++ zu sein. Ich habe nach einer Mac OS X XCode-spezifischen Referenzseite gegoogelt und keine gefunden. Was ist eine gute Referenz-Website für Mac OS X C++? Oder gibt es irgendwo eine C++-Referenz, die in die XCode-Hilfe integriert ist, und ich habe sie einfach nicht gefunden? Oder gibt es im Apple Development Center auch eines, das ich vermisst habe?

So groß die XCode-Diskimages auch sind, die ich herunterlade und installiere, wenn ich dazu aufgefordert werde, sicherlich gibt es dort eine Sprachreferenz - ich meine, das Java-Zeug, das ich anfangs heruntergeladen habe, war RIESIG.

Todd

Krevnik

8. September 2003
  • 11. Juni 2007
toddburch sagte: OK, jetzt zu strcasecmp() . Die Website cppreference.com, die ich verwende, scheint nur Standard-C/C++ zu sein. Ich habe nach einer Mac OS X XCode-spezifischen Referenzseite gegoogelt und keine gefunden. Was ist eine gute Referenz-Website für Mac OS X C++? Oder gibt es irgendwo eine C++-Referenz, die in die XCode-Hilfe integriert ist, und ich habe sie einfach nicht gefunden? Oder gibt es im Apple Development Center auch eines, das ich vermisst habe?

Es ist da, aber ich glaube nicht, dass es über die C-Funktionen geht, die sich in der POSIX-Schicht befinden, sondern nur alle Ergänzungen von Apple zu POSIX. Sie können das Terminal verwenden, um auf man-Seiten zu einigen dieser Funktionen zuzugreifen. 'man strcasecmp' führt Sie direkt zu der Seite, die über diese Funktion spricht und beschreibt, wie Sie sie verwenden.

Aha

25. Oktober 2004
  • 11. Juni 2007
Beim Stöbern in Xcode habe ich einen Link zu dieser Seite gefunden:

http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html

Dies ist ein Inhaltsverzeichnis für alles in den Manpages von OS X, einschließlich der C-Bibliotheksfunktionen.

Die Xcode-Referenzbibliothek greift zusätzlich zu anderen Ressourcen auf Manpages zu, sodass diese alle über Xcode verfügbar sind (ich verwende ständig 'Find Selected Text in API Reference').

Es sieht so aus, als ob sich die C-Funktionen in Abschnitt 3 befinden. Es sieht so aus, als ob die Dokumentation für jede Funktion einen Abschnitt „Standard“ oder „Geschichte“ enthält, der einige Informationen darüber enthält, welchem ​​Standard die Funktion entspricht. Anscheinend wurde strcasecmp() aus Compliance-Gründen von 'string.h' nach 'strings.h' verschoben. Ich bin mir nicht sicher, in welcher Weise das konform ist. Ich denke, das bedeutet, dass nicht standardmäßige Funktionen in string.h nicht erscheinen sollten, also haben sie es in eine andere Header-Datei verschoben. T

schmelzen

Originalplakat
4. Dezember 2006
Katy, Texas
  • 11. Juni 2007
Das ist eine tolle Referenzseite! Ich dachte, solche Informationen wären irgendwo drin!