포럼

Mac C++ 문자열 클래스 - 대소문자를 구분하지 않는 비교?

NS

녹아내리다

오리지널 포스터
2006년 12월 4일
케이티, 텍사스
  • 2007년 6월 8일
온라인 참조(cppreference.com)와 내 C++ 책을 살펴보았지만 문자열을 구분하지 않는 compare()를 찾을 수 없습니다. 확실히 C-String 대소문자를 구분하지 않는 비교가 있지만 있으면 C++ 비교를 사용하고 싶습니다.

(게다가, 지금은 그것을 찾는 임무를 수행하고 있습니다...)

고마워, 토드 NS

녹아내리다

오리지널 포스터
2006년 12월 4일


케이티, 텍사스
  • 2007년 6월 8일
모든 공백(X'20')의 필요한 것보다 긴 것으로 알려진 bitset OR을 사용한 다음 소문자 비교를 테스트할 수 있을 것 같습니다...

알 겠어요

2004년 10월 25일
  • 2007년 6월 8일
거의 믿을 수 없지만 표준 C++ 라이브러리에 대소문자 구분이 없다고는 생각하지 않습니다.

로케일을 원하지 않거나 걱정할 필요가 없다면 다음을 수행하십시오.
_stricmp( str1.c_str(), str2.c_str())
가장 간단한 솔루션입니다(또한 매우 효율적입니다).

로케일은 일을 상당히 복잡하게 만듭니다.
로케일과 관련된 링크를 찾을 수 있는지 확인하십시오 ...
여기 하나가 있습니다: http://lafstern.org/matt/col2_new.pdf
그가 무슨 말을 하는지 정말로 알고 있는지는 모르겠지만, 그가 알고 있는 것처럼 들립니다. 그는 잠시 동안 이에 대해 계속해서 문제를 이해할 수 있지만 맨 아래로 건너뛰고 그의 최상의 솔루션에 대한 마지막 코드 블록을 확인할 수 있습니다. NS

녹아내리다

오리지널 포스터
2006년 12월 4일
케이티, 텍사스
  • 2007년 6월 9일
감사합니다. 네, 아마 맞을 겁니다. 그러나 내 목적을 위해 7비트 ASCII 문자 코드로 작업할 것이며 이 코드 덩어리가 충분할 것이라고 생각합니다.

확인해주셔서 감사합니다. 제가 누락된 것이 아니라서 다행입니다.

토드

코드: |_+_| NS

녹아내리다

오리지널 포스터
2006년 12월 4일
케이티, 텍사스
  • 2007년 6월 10일
iSee는 다음과 같이 말했습니다. 로케일에 대해 걱정하거나 원하지 않는다면 다음을 수행하십시오.
_stricmp( str1.c_str(), str2.c_str())
가장 간단한 솔루션입니다(또한 매우 효율적입니다).

알겠습니다. 포기합니다. 어디서 생각해냈어 _스트리프 ?

토드

위테지트

2007년 2월 18일
에인트호번
  • 2007년 6월 11일
toddburch가 말했습니다: 좋아, 나는 포기한다. 어디서 생각해냈어 _스트리프 ?

토드

윈도우즈입니다. Unix 라이브러리는 strcasecmp를 사용하며 .

Wittegijt.

알 겠어요

2004년 10월 25일
  • 2007년 6월 11일
toddburch가 말했습니다: 좋아, 나는 포기한다. 어디서 생각해냈어 _스트리프 ?

토드

알겠습니다. 버려서 죄송합니다.

나는 그것이 표준 C 라이브러리의 일부라고 생각했지만, 그렇지 않습니다. C 라이브러리의 다양한 구현에서 비공식적으로 다른 이름으로 나타납니다. 따라서 대소문자를 구분하지 않는 비교는 공식 C 라이브러리의 공식 부분도 아닙니다. 이런. 너무 큰 누락 같습니다. VS에서는 _stricmp() 또는 stricmp()이고, Mac용 CodeWarrior에서는 stricmp() 또는 strcasecmp()이고, OS X 10.4/Xcode에서는 strcasecmp()입니다.

생각해보면 맨 앞의 밑줄이 힌트를 줬어야 했습니다.

C 표준을 따르고 싶다면 루프에서 tolower() (또는 toupper())를 사용하여 자체적으로 구현해야 합니다.

첫 번째 패스는 다음과 같습니다.
코드: |_+_|
어쨌든 나쁜 조언을 해서 다시 한 번 죄송합니다. CodeWarrior 시절 이후로 OS API(CFString 등)를 피하고 싶었던 Mac OS X에서 C/C++ 코딩을 많이 하지 않은 것 같습니다... NS

녹아내리다

오리지널 포스터
2006년 12월 4일
케이티, 텍사스
  • 2007년 6월 11일
아하하. 맞는 말이다. Wittegijt & iSee에게 감사드립니다. 나는 내 '백과사전 C'(Sybex, 1991)를 읽었고 Microsoft의 모든(또는 적어도 많은) 비표준 키워드에는 모두 첫 번째 문자에도 밑줄이 있습니다. 나에게 제보했어야 했다.

좋아, 이제 strcasecmp() . 내가 사용하고 있는 cppreference.com 웹 사이트는 표준 C/C++로만 보입니다. Mac OS X XCode 관련 참조 사이트를 검색했지만 찾지 못했습니다. 좋은 Mac OS X C++ 참조 웹사이트는 무엇입니까? 또는 어딘가에 XCode 도움말에 내장된 C++ 참조가 있는데 찾지 못했습니까? 아니면, 그 모든 것에 실패했는데, 내가 놓친 Apple Development Center가 있습니까?

메시지가 표시될 때 다운로드하여 설치하는 XCode 디스크 이미지만큼 크기가 크면 누군가 거기에 언어 참조가 있을 것입니다. 즉, 처음에 다운로드한 Java 항목은 거대했습니다.

토드

크레브니크

2003년 9월 8일
  • 2007년 6월 11일
toddburch는 다음과 같이 말했습니다. strcasecmp() . 내가 사용하고 있는 cppreference.com 웹 사이트는 표준 C/C++로만 보입니다. Mac OS X XCode 관련 참조 사이트를 검색했지만 찾지 못했습니다. 좋은 Mac OS X C++ 참조 웹사이트는 무엇입니까? 또는 어딘가에 XCode 도움말에 내장된 C++ 참조가 있는데 찾지 못했습니까? 아니면, 그 모든 것에 실패했는데, 내가 놓친 Apple Development Center가 있습니까?

거기에 있지만 POSIX 계층에 있는 C 기능은 다루지 않고 POSIX에 대한 Apple의 모든 추가 사항만 설명합니다. 터미널을 사용하여 이러한 기능 중 일부에 대한 매뉴얼 페이지에 액세스할 수 있습니다. 'man strcasecmp'는 해당 기능에 대해 설명하고 사용 방법을 설명하는 페이지로 바로 이동합니다.

알 겠어요

2004년 10월 25일
  • 2007년 6월 11일
Xcode를 뒤지다가 이 페이지에 대한 링크를 찾았습니다.

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

C 라이브러리 기능을 포함하여 OS X 매뉴얼 페이지의 모든 내용에 대한 목차입니다.

Xcode 참조 라이브러리는 다른 리소스 외에도 매뉴얼 페이지에 액세스하므로 모두 Xcode를 통해 사용할 수 있습니다(저는 항상 'API 참조에서 선택한 텍스트 찾기'를 사용합니다).

C 함수가 섹션 3에 있는 것처럼 보입니다. 각 함수에 대한 문서에는 함수가 준수하는 표준에 대한 정보를 제공하는 '표준' 또는 '이력' 섹션이 포함되어 있는 것 같습니다. 분명히 strcasecmp()는 규정 준수를 위해 'string.h'에서 'strings.h'로 이동되었습니다. 정확히 어떤 방식으로 규정을 준수하는지 모르겠습니다. 비표준 함수는 string.h에 표시되지 않아야 하므로 다른 헤더 파일로 옮겼습니다. NS

녹아내리다

오리지널 포스터
2006년 12월 4일
케이티, 텍사스
  • 2007년 6월 11일
훌륭한 참조 페이지입니다! 그런 정보가 어딘가에 있다고 생각했습니다!