المنتديات

فئة سلسلة Mac C ++ - مقارنة غير حساسة لحالة الأحرف؟

تي

صهر

ملصق أصلي
4 ديسمبر 2006
كاتي ، تكساس
  • 8 يونيو 2007
لقد بحثت في مرجع عبر الإنترنت (cppreference.com) وكتابي C ++ ، لكن لا يمكنني العثور على مقارنة سلسلة غير حساسة (). هناك بالتأكيد مقارنات غير حساسة لحالة C-String ، لكنني أفضل استخدام مقارنة C ++ إذا كان هناك واحد.

(بالإضافة إلى ذلك ، أنا الآن في مهمة للعثور عليه ...)

شكرا تود تي

صهر

ملصق أصلي
4 ديسمبر 2006


كاتي ، تكساس
  • 8 يونيو 2007
أعتقد أنه يمكنني استخدام مجموعة بت أو مع سلسلة معروفة أطول من المطلوب لجميع الفراغات (X'20 ') ثم اختبار مقارنة بالحالة الصغيرة ...

أرى

25 أكتوبر 2004
  • 8 يونيو 2007
يكاد يكون الأمر فوق التصور ، لكنني لا أعتقد أن مكتبة C ++ القياسية تحتوي على حالة غير حساسة لحالة الأحرف.

إذا كنت لا تريد أو لا داعي للقلق بشأن المواقع ، فقم بالتالي:
_stricmp (str1.c_str ()، str2.c_str ())
هو أبسط حل (أيضًا فعال للغاية).

تعقيد Locales الأمور إلى حد ما (حسنًا ، إن أوجه القصور في المكتبة القياسية هي التي تجعل هذا الأمر معقدًا للغاية).
Lemme معرفة ما إذا كان بإمكاني العثور على رابط لشيء يتعامل مع اللغات ...
هنا واحد: http://lafstern.org/matt/col2_new.pdf
لا أعرف ما إذا كان يعرف حقًا ما يتحدث عنه ، لكن يبدو أنه يعرف ذلك. يتابع لفترة من الوقت حول هذا الموضوع حتى تتمكن من فهم المشكلة ، ولكن يمكنك التخطي إلى أسفل والتحقق من آخر كتلة رمز للحصول على أفضل حل له. تي

صهر

ملصق أصلي
4 ديسمبر 2006
كاتي ، تكساس
  • 9 يونيو 2007
شكرا iSee. نعم ، ربما يكون على حق. ومع ذلك ، من أجل أغراضي ، سأعمل مع رموز أحرف ASCII ذات 7 بتات ، وأعتقد أن قطعة الكود هذه ستكون جيدة بما فيه الكفاية.

شكرًا على التأكيد - سعيد لأنني لم أفقده فقط.

تود

الكود: #include #include using namespace std ; bool case_insensitive_compare( string a, string b) { char char1, char2, blank = ' ' ; int len1 = a.length() ; int len2 = b.length() ; for (int i = 0 ; i input ; result = case_insensitive_compare(input, hello) ; std::cout << 'Result of compare of ' << input << ' to ' << hello << ' is ' << (result ? 'true' : 'false' ) << endl ; return 0; } تي

صهر

ملصق أصلي
4 ديسمبر 2006
كاتي ، تكساس
  • 10 يونيو 2007
قال iSee: إذا كنت لا تريد أو لا داعي للقلق بشأن المواقع ، فعندئذٍ:
_stricmp (str1.c_str ()، str2.c_str ())
هو أبسط حل (أيضًا فعال للغاية).

حسنا انا استسلم. من أين أتيت _stricmp ؟

تود في

wittegijt

18 فبراير 2007
أيندهوفن
  • 11 يونيو 2007
قال تودبيرش: حسنًا ، أنا أستسلم. من أين أتيت _stricmp ؟

تود

إنه شيء Windows. تستخدم مكتبات Unix strcasecmp ، فهي موجودة.

فيتيجيت.

أرى

25 أكتوبر 2004
  • 11 يونيو 2007
قال تودبيرش: حسنًا ، أنا أستسلم. من أين أتيت _stricmp ؟

تود

حسنًا ، آسف لإلقاء ذلك هناك.

اعتقدت أنها كانت جزءًا من مكتبة C القياسية ، لكنها ليست كذلك. يظهر فقط ، بشكل غير رسمي ، تحت أسماء مختلفة ، في تطبيقات مختلفة لمكتبة C. لذا فإن المقارنة غير الحساسة لحالة الأحرف ليست جزءًا رسميًا من مكتبة C الرسمية أيضًا. جيز. يبدو مثل هذا الحذف الكبير. تحت VS ، يكون _stricmp () أو stricmp () ، تحت CodeWarrior لنظام التشغيل Mac يكون stricmp () أو strcasecmp () ، وتحت OS X 10.4 / Xcode يكون strcasecmp ().

تعال إلى التفكير في الأمر ، كان ينبغي أن تعطيني الشرطة السفلية الرئيسية التلميح.

أعتقد أنه إذا كنت تريد التوافق مع معيار C ، فيجب عليك تنفيذ معيارك باستخدام tolower () (أو toupper ()) في حلقة.

دعنا نرى أن التمريرة الأولى قد تكون (هذا من أعلى رأسي ، لم يتم اختبار الكود):
الكود: #include ... int mystricmp(const char* str1, const char* str2) { if (str1 == str2) return 0; else if (str1 == NULL) return -1; else if (str2 == NULL) return 1; else { while (tolower(*str1) == tolower(*str2) && *str1 != 0 && *str2 != 0) { ++str1; ++str2; } if (*str1 *str2) return 1; else return 0; } }
على أي حال ، مرة أخرى ، آسف للنصيحة السيئة. أعتقد أنني لم أقم بالفعل بالكثير من ترميز C / C ++ على نظام التشغيل Mac OS X حيث أردت تجنب OS API (CFString ، إلخ) منذ أيام CodeWarrior ... تي

صهر

ملصق أصلي
4 ديسمبر 2006
كاتي ، تكساس
  • 11 يونيو 2007
أهها. من المنطقي. شكرا Wittegijt & iSee. لقد كنت أقرأ 'Encyclopedia 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
قال تودبيرش: حسنًا ، الآن إلى strcasecmp () . يبدو أن موقع الويب cppreference.com الذي كنت أستخدمه هو معيار C / C ++ فقط. لقد بحثت في Google عن موقع مرجعي خاص بنظام التشغيل Mac OS X XCode ولم أجد موقعًا. ما هو موقع مرجعي جيد لنظام التشغيل Mac OS X C ++؟ أو ، هل هناك مرجع C ++ مدمج في مساعدة XCode في مكان ما ولم أجده؟ أو ، بعد فشل كل ذلك ، هل هناك واحد في مركز تطوير Apple فاتني أيضًا؟

إنه موجود ، لكنني لا أعتقد أنه يتجاوز وظائف C الموجودة في طبقة POSIX ، فقط كل إضافات Apple إلى POSIX. يمكنك استخدام الجهاز للوصول إلى صفحات الدليل في بعض هذه الوظائف. سيأخذك 'man strcasecmp' مباشرة إلى الصفحة التي تتحدث عن هذه الوظيفة ويصف كيفية استخدامها.

أرى

25 أكتوبر 2004
  • 11 يونيو 2007
بالبحث في Xcode ، وجدت رابطًا لهذه الصفحة:

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

وهو جدول محتويات لكل شيء في صفحات رجل OS X ، بما في ذلك وظائف مكتبة C.

تصل مكتبة مرجعية Xcode إلى صفحات الدليل بالإضافة إلى الموارد الأخرى ، لذلك تتوفر جميعها من خلال Xcode (أستخدم 'البحث عن النص المحدد في مرجع واجهة برمجة التطبيقات' طوال الوقت).

يبدو أن وظائف C موجودة في القسم 3. يبدو أن الوثائق الخاصة بكل وظيفة تحتوي على قسم 'قياسي' أو 'سجل' يوفر بعض المعلومات حول المعيار الذي تتوافق معه الوظيفة. يبدو أنه تم نقل strcasecmp () من 'string.h' إلى 'strings.h' لأسباب تتعلق بالامتثال. لست متأكدًا بالضبط من الطريقة التي تجعله متوافقًا. أعتقد أن هذا يعني أن الوظائف غير القياسية يجب ألا تظهر في string.h ، لذلك قاموا بنقلها إلى ملف رأس مختلف. تي

صهر

ملصق أصلي
4 ديسمبر 2006
كاتي ، تكساس
  • 11 يونيو 2007
هذه صفحة مرجعية رائعة! كنت أحسب أن مثل هذه المعلومات كانت هناك في مكان ما!