Forum

Mac C++ string class — porównanie bez uwzględniania wielkości liter?

T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.
Katy, Teksas
  • 8 czerwca 2007
Sprawdziłem w odwołaniu online (cppreference.com) i mojej książce C++, ale nie mogę znaleźć niewrażliwego ciągu Compare(). Z pewnością istnieją porównania C-String bez uwzględniania wielkości liter, ale wolałbym użyć porównania C++, jeśli istnieje.

(Dodatkowo, teraz mam misję, aby to znaleźć...)

Dzięki Todd T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.


Katy, Teksas
  • 8 czerwca 2007
Myślę, że mógłbym użyć bitsetu OR ze znanym ciągiem znaków dłuższym niż potrzeba (X'20'), a następnie przetestować porównanie małych liter...

Widzę

25 paź 2004
  • 8 czerwca 2007
To prawie nie do uwierzenia, ale nie wierzę, że standardowa biblioteka C++ nie uwzględnia wielkości liter.

Jeśli nie chcesz lub nie musisz się martwić o lokalizacje, to:
_stricmp( str1.c_str(), str2.c_str() )
To najprostsze rozwiązanie (również dość wydajne).

Lokalizacje trochę komplikują sprawę (cóż, tak naprawdę to wady standardowej biblioteki sprawiają, że jest to tak skomplikowane).
Pozwól, że zobaczę, czy znajdę link do czegoś, co dotyczy lokalizacji...
Tutaj jest jeden: http://lafstern.org/matt/col2_new.pdf
Nie wiem, czy naprawdę wie, o czym mówi, ale wygląda na to, że wie. Mówi o tym przez chwilę, abyś mógł zrozumieć problem, ale możesz przejść do dołu i sprawdzić ostatni blok kodu, aby znaleźć najlepsze rozwiązanie. T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.
Katy, Teksas
  • 9 czerwca 2007 r.
Dzięki iSee. Tak, prawdopodobnie ma rację. Jednak dla moich celów będę pracował z 7-bitowymi kodami znaków ASCII i myślę, że ten fragment kodu będzie wystarczająco dobry.

Dzięki za potwierdzenie - cieszę się, że nie tylko tego przegapiłem.

Todd

Kod: |__+_| T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.
Katy, Teksas
  • 10 czerwca 2007 r.
iSee powiedział: Jeśli nie chcesz lub nie musisz się martwić o ustawienia regionalne, to:
_stricmp( str1.c_str(), str2.c_str() )
To najprostsze rozwiązanie (również dość wydajne).

Ok, poddaję się. Skąd wymyśliłeś _stricmp ?

Todd W

wittegijt

18 lutego 2007 r.
Eindhoven
  • 11 czerwca 2007 r.
Toddburch powiedział: OK, poddaję się. Skąd wymyśliłeś _stricmp ?

Todd

To kwestia Windowsa. Biblioteki Unix używają strcasecmp, jest w .

Wittegijta.

Widzę

25 paź 2004
  • 11 czerwca 2007 r.
Toddburch powiedział: OK, poddaję się. Skąd wymyśliłeś _stricmp ?

Todd

OK, przepraszam, że to wyrzuciłem.

Myślałem, że to część standardowej biblioteki C, ale tak nie jest. Po prostu pojawia się, nieoficjalnie, pod różnymi nazwami, w różnych implementacjach biblioteki C. Zatem porównanie bez rozróżniania wielkości liter nie jest również oficjalną częścią oficjalnej biblioteki C. Jezu. Wydaje się, że to takie ogromne zaniedbanie. W VS jest to _stricmp() lub stricmp(), w CodeWarrior dla komputerów Mac jest to stricmp() lub strcasecmp(), a pod OS X 10.4/Xcode jest to strcasecmp().

Pomyśl o tym, wiodący znak podkreślenia powinien dać mi wskazówkę.

Myślę, że jeśli chcesz dostosować się do standardu C, musisz zaimplementować własne, używając tolower() (lub toupper()) w pętli.

Zobaczmy, że pierwsze przejście może być (to jest poza czubkiem mojej głowy, NIE testowany kod):
Kod: |__+_|
W każdym razie znowu przepraszam za złą radę. Wydaje mi się, że od czasów CodeWarrior nie robiłem zbyt wiele kodowania w C/C++ na Mac OS X, gdzie chciałem uniknąć OS API (CFString, itp.)… T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.
Katy, Teksas
  • 11 czerwca 2007 r.
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Ma sens. Dzięki Wittegijt i iSee. Czytałem moją „Encyklopedię C” (Sybex, 1991) i wszystkie (lub przynajmniej wiele) niestandardowych słów kluczowych Microsoftu mają również podkreślenie dla pierwszego znaku. Powinien był mnie uprzedzić.

OK, teraz do strcasecmp() . Strona internetowa cppreference.com, z której korzystałem, wygląda na standardowy C/C++. Szukałem strony referencyjnej Mac OS X XCode i nie znalazłem żadnej. Co to jest dobra strona internetowa Mac OS X C++? A może jest gdzieś odwołanie do C++ wbudowane w pomoc XCode, a ja go po prostu nie znalazłem? A może, jeśli to wszystko się nie powiedzie, jest jeden w Apple Development Center, którego też przegapiłem?

Tak duże, jak obrazy dysków XCode, które pobieram i instaluję po wyświetleniu monitu, z pewnością jest tam odniesienie do języka - mam na myśli to, że początkowo pobrałem Javę był OGROMNY.

Todd

Krevnik

8 września 2003 r.
  • 11 czerwca 2007 r.
Toddburch powiedział: OK, teraz do strcasecmp() . Strona internetowa cppreference.com, z której korzystałem, wygląda na standardowy C/C++. Szukałem strony referencyjnej Mac OS X XCode i nie znalazłem żadnej. Co to jest dobra strona internetowa Mac OS X C++? A może jest gdzieś odwołanie do C++ wbudowane w pomoc XCode, a ja go po prostu nie znalazłem? A może, jeśli to wszystko się nie powiedzie, jest jeden w Apple Development Center, którego też przegapiłem?

Jest tam, ale nie wydaje mi się, żeby obejmowała funkcje C, które są w warstwie POSIX, tylko wszystkie dodatki Apple do POSIX. Możesz użyć terminala, aby uzyskać dostęp do stron podręcznika dotyczących niektórych z tych funkcji. 'man strcasecmp' przeniesie Cię bezpośrednio do strony mówiącej o tej funkcji i opisze, jak jej używać.

Widzę

25 paź 2004
  • 11 czerwca 2007 r.
Szperając w Xcode, znalazłem link do tej strony:

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

który jest spisem treści wszystkich stron podręcznika OS X, w tym funkcji biblioteki C.

Biblioteka referencyjna Xcode umożliwia dostęp do stron man oprócz innych zasobów, więc wszystkie są dostępne za pośrednictwem Xcode (cały czas używam funkcji „Znajdź wybrany tekst w referencji API”).

Wygląda na to, że funkcje C znajdują się w sekcji 3. Wygląda na to, że dokumentacja każdej funkcji zawiera sekcję „standard” lub „historia”, która zawiera informacje o tym, z jakim standardem jest zgodna funkcja. Najwyraźniej strcasecmp() została przeniesiona z „string.h” do „strings.h” ze względu na zgodność. Nie jestem pewien, w jaki sposób jest to zgodne. Myślę, że oznacza to, że niestandardowe funkcje nie powinny pojawiać się w string.h, więc przenieśli je do innego pliku nagłówkowego. T

przetapiać

Oryginalny plakat
4 grudnia 2006 r.
Katy, Teksas
  • 11 czerwca 2007 r.
To świetna strona referencyjna! Domyśliłem się, że takie informacje gdzieś tam są!