Φόρουμ

Κατηγορία συμβολοσειρών Mac C++ - σύγκριση πεζών-κεφαλαίων δεν γίνεται;

Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006
Katy, Τέξας
  • 8 Ιουνίου 2007
Έχω ψάξει σε μια ηλεκτρονική αναφορά (cppreference.com) και το βιβλίο μου στη C++, αλλά δεν μπορώ να βρω μια συμβολοσειρά που δεν είναι ευαίσθητη στο compare(). Σίγουρα υπάρχουν συγκρίσεις χωρίς διάκριση πεζών-κεφαλαίων C-String, αλλά θα προτιμούσα να χρησιμοποιήσω μια σύγκριση C++ αν υπάρχει.

(Επιπλέον, τώρα είμαι σε μια αποστολή να το βρω...)

Ευχαριστώ Todd Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006


Katy, Τέξας
  • 8 Ιουνίου 2007
Υποθέτω ότι θα μπορούσα να χρησιμοποιήσω ένα σύνολο δυαδικών ψηφίων OR με μια γνωστή μεγαλύτερη από όσο χρειαζόμουν συμβολοσειρά όλων των κενών (X'20') και μετά να δοκιμάσω για σύγκριση με πεζά...

βλέπω

25 Οκτωβρίου 2004
  • 8 Ιουνίου 2007
Είναι σχεδόν απίστευτο, αλλά δεν πιστεύω ότι η τυπική βιβλιοθήκη C++ δεν έχει διάκριση πεζών-κεφαλαίων.

Εάν δεν θέλετε ή δεν χρειάζεται να ανησυχείτε για τις τοπικές ρυθμίσεις, τότε:
_stricmp( str1.c_str(), str2.c_str() )
Είναι η απλούστερη λύση (επίσης αρκετά αποτελεσματική).

Οι τοπικές ρυθμίσεις περιπλέκουν αρκετά τα πράγματα (καλά, είναι πραγματικά οι ελλείψεις της τυπικής βιβλιοθήκης που το κάνουν τόσο περίπλοκο).
Ας δούμε αν μπορώ να βρω έναν σύνδεσμο για κάτι που αφορά τις τοπικές ρυθμίσεις...
ορίστε ένα: http://lafstern.org/matt/col2_new.pdf
Δεν ξέρω αν ξέρει πραγματικά τι λέει, αλλά ακούγεται ότι ξέρει. Συνεχίζει για λίγο σχετικά με αυτό, ώστε να κατανοήσετε το ζήτημα, αλλά μπορείτε να μεταβείτε στο κάτω μέρος και να ελέγξετε το τελευταίο μπλοκ κώδικα για την καλύτερη λύση του. Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006
Katy, Τέξας
  • 9 Ιουνίου 2007
Ευχαριστώ iSee. Ναι, μάλλον έχει δίκιο. Ωστόσο, για τους σκοπούς μου, θα δουλέψω με κωδικούς χαρακτήρων ASCII 7-bit και νομίζω ότι αυτό το κομμάτι κώδικα θα είναι αρκετά καλό.

Ευχαριστώ για την επιβεβαίωση - χαίρομαι που δεν το έχασα απλώς.

Τοντ

Κωδικός: |_+_| Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006
Katy, Τέξας
  • 10 Ιουνίου 2007
Το iSee είπε: Εάν δεν θέλετε ή δεν χρειάζεται να ανησυχείτε για τις τοπικές ρυθμίσεις, τότε:
_stricmp( str1.c_str(), str2.c_str() )
Είναι η απλούστερη λύση (επίσης αρκετά αποτελεσματική).

Εντάξει, τα παρατάω. Που καταλήξατε _stricmp ?

Τοντ ΣΕ

wittegijt

18 Φεβρουαρίου 2007
Αϊντχόφεν
  • 11 Ιουνίου 2007
toddburch είπε: Εντάξει, τα παρατάω. Που καταλήξατε _stricmp ?

Τοντ

Είναι θέμα Windows. Οι βιβλιοθήκες Unix χρησιμοποιούν strcasecmp, είναι σε .

Wittegijt.

βλέπω

25 Οκτωβρίου 2004
  • 11 Ιουνίου 2007
toddburch είπε: Εντάξει, τα παρατάω. Που καταλήξατε _stricmp ?

Τοντ

Εντάξει, συγγνώμη που το έριξα εκεί έξω.

Νόμιζα ότι ήταν μέρος της τυπικής βιβλιοθήκης C, αλλά δεν είναι. Απλώς εμφανίζεται, ανεπίσημα, με διαφορετικά ονόματα, σε διάφορες υλοποιήσεις της βιβλιοθήκης C. Επομένως, μια σύγκριση χωρίς διάκριση πεζών-κεφαλαίων δεν είναι επίσης επίσημο μέρος της επίσημης βιβλιοθήκης C. Γκέιζ. Φαίνεται τόσο τεράστια παράλειψη. Κάτω από το VS, είναι _stricmp() ή stricmp(), κάτω από το CodeWarrior για Mac είναι stricmp() ή strcasecmp() και στο OS X 10.4/Xcode είναι strcasecmp().

Αν το σκεφτώ, η κορυφαία υπογράμμιση θα έπρεπε να μου είχε δώσει την υπόδειξη.

Υποθέτω ότι εάν θέλετε να συμμορφωθείτε με το πρότυπο C, πρέπει να εφαρμόσετε το δικό σας χρησιμοποιώντας tolower() (ή toupper()) σε έναν βρόχο.

Ας δούμε ότι ένα πρώτο πέρασμα μπορεί να είναι (Αυτό είναι από την κορυφή του κεφαλιού μου, ΟΧΙ δοκιμασμένος κωδικός):
Κωδικός: |_+_|
Τέλος πάντων, και πάλι, συγγνώμη για την κακή συμβουλή. Υποθέτω ότι δεν έχω κάνει πραγματικά πολλή κωδικοποίηση C/C++ στο Mac OS X όπου ήθελα να αποφύγω το API του λειτουργικού συστήματος (CFString, κ.λπ.) από την εποχή του CodeWarrior... Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006
Katy, Τέξας
  • 11 Ιουνίου 2007
Αχχχα. Βγάζει νόημα. Ευχαριστώ Wittegijt & iSee. Διαβάζω την «Εγκυκλοπαίδεια C» μου (Sybex, 1991) και όλες (ή πολλές, τουλάχιστον) οι μη τυπικές λέξεις-κλειδιά της Microsoft έχουν όλες μια υπογράμμιση και για τον πρώτο χαρακτήρα. Έπρεπε να με ενημερώσει.

Εντάξει, τώρα να strcasecmp() . Ο ιστότοπος cppreference.com που χρησιμοποιώ φαίνεται να είναι μόνο τυπικός C/C++. Έχω ψάξει στο google για ένα συγκεκριμένο ιστότοπο αναφοράς για Mac OS X XCode και δεν έχω βρει. Τι είναι ένας καλός ιστότοπος αναφοράς Mac OS X C++; Ή, υπάρχει κάπου μια αναφορά C++ ενσωματωμένη στη βοήθεια του XCode και απλά δεν τη βρήκα; Ή, ελλείψει όλων αυτών, υπάρχει κάποιο στο Κέντρο Ανάπτυξης της Apple που έχω χάσει και εμένα;

Όσο μεγάλες είναι οι αποκλίσεις του XCode που κατεβάζω και εγκαθιστώ όταν μου ζητηθεί, σίγουρα υπάρχει κάποια αναφορά γλώσσας εκεί - εννοώ ότι τα πράγματα Java που κατέβασα αρχικά ήταν ΤΕΡΑΣΤΙΑ.

Τοντ

Κρέβνικ

8 Σεπτεμβρίου 2003
  • 11 Ιουνίου 2007
toddburch είπε: Εντάξει, τώρα να strcasecmp() . Ο ιστότοπος cppreference.com που χρησιμοποιώ φαίνεται να είναι μόνο τυπικός C/C++. Έχω ψάξει στο google για ένα συγκεκριμένο ιστότοπο αναφοράς για Mac OS X XCode και δεν έχω βρει. Τι είναι ένας καλός ιστότοπος αναφοράς Mac OS X C++; Ή, υπάρχει κάπου μια αναφορά C++ ενσωματωμένη στη βοήθεια του XCode και απλά δεν τη βρήκα; Ή, ελλείψει όλων αυτών, υπάρχει κάποιο στο Κέντρο Ανάπτυξης της Apple που έχω χάσει και εμένα;

Είναι εκεί, αλλά δεν νομίζω ότι υπερβαίνει τις συναρτήσεις C που βρίσκονται στο επίπεδο POSIX, απλώς όλες τις προσθήκες της Apple στο POSIX. Μπορείτε να χρησιμοποιήσετε το τερματικό για να αποκτήσετε πρόσβαση σε σελίδες man σε ορισμένες από αυτές τις λειτουργίες. Το 'man strcasecmp' θα σας μεταφέρει απευθείας στη σελίδα που μιλάει για αυτήν τη συνάρτηση και θα σας περιγράψει πώς να τη χρησιμοποιήσετε.

βλέπω

25 Οκτωβρίου 2004
  • 11 Ιουνίου 2007
Ψάχνοντας στο Xcode, βρήκα έναν σύνδεσμο προς αυτήν τη σελίδα:

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

που είναι ένας πίνακας περιεχομένων για τα πάντα στις σελίδες man του OS X, συμπεριλαμβανομένων των λειτουργιών της βιβλιοθήκης C.

Η βιβλιοθήκη αναφοράς Xcode έχει πρόσβαση σε σελίδες man εκτός από άλλους πόρους, επομένως αυτοί είναι όλοι διαθέσιμοι μέσω του Xcode (χρησιμοποιώ συνεχώς το 'Find Selected Text in API Reference').

Φαίνεται ότι οι συναρτήσεις C βρίσκονται στην ενότητα 3. Φαίνεται ότι η τεκμηρίωση για κάθε συνάρτηση περιέχει μια ενότητα 'πρότυπο' ή 'ιστορικό' που παρέχει ορισμένες πληροφορίες σχετικά με το πρότυπο με το οποίο συμμορφώνεται η συνάρτηση. Προφανώς η strcasecmp() μετακινήθηκε από το 'string.h' στο 'strings.h' για λόγους συμμόρφωσης. Δεν είμαι σίγουρος με ποιον ακριβώς τρόπο αυτό το κάνει να συμμορφώνεται. Υποθέτω ότι σημαίνει ότι οι μη τυπικές συναρτήσεις δεν πρέπει να εμφανίζονται στο string.h, επομένως το μετέφεραν σε διαφορετικό αρχείο κεφαλίδας. Τ

λιώνουν

Πρωτότυπη αφίσα
4 Δεκεμβρίου 2006
Katy, Τέξας
  • 11 Ιουνίου 2007
Αυτή είναι μια εξαιρετική σελίδα αναφοράς! Νόμιζα ότι υπήρχαν πληροφορίες σαν αυτές κάπου εκεί μέσα!