سؤال

ما هي أفضل طريقة الناس وجدوا أن تفعل السلسلة إلى الحالة الأدنى / الأعلى الحال في C++?

المسألة تعقيدا هو حقيقة أن C++ ليست الإنجليزية فقط لغة البرمجة.هل هناك جيدة متعدد اللغات الأسلوب ؟

هل كانت مفيدة؟

المحلول

#include <algorithm>
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(), ::toupper);

http://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/

أيضا ، CodeProject المادة المشتركة سلسلة طرق: http://www.codeproject.com/KB/stl/STL_string_util.aspx

نصائح أخرى

> std::string data = “Abc”; 
> std::transform(data.begin(), data.end(), data.begin(), ::toupper);

هذا العمل, ولكن هذا سوف تستخدم "ج" لغة.يمكنك استخدام الأوجه إذا كنت تحتاج إلى الحصول على tolower عن لغة أخرى.رمز أعلاه باستخدام جوانب ليكون:

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

عن نسخة pasters على أمل أن استخدام نيك قوي الجواب ، لاحظ خطأ إملائي في "use_factet" و المفقودين الثالثة المعلمة إلى std::تحويل:

locale loc("");
const ctype<char>& ct = use_factet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

يجب أن يكون

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), str.begin(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

يجب عليك أيضا مراجعة هذا السؤال.أساسا المشكلة هي أن معيار C/C++ المكتبات لم تكن مبنية على التعامل مع بيانات Unicode ، لذلك سيكون لديك لننظر إلى مكتبات أخرى.

هذا قد يتغير C++ القياسية المحدثة.أعلم التالي المترجم من Borland (CodeGear) سوف يكون دعم يونيكود, و أعتقد أن مايكروسوفت برنامج التحويل البرمجي C++ ، أو بالفعل سلسلة المكتبات التي تدعم Unicode.

كما دارين قلت لك أسهل طريقة هي استخدام std::تحويل.

ولكن حذار أن في بعض اللغات مثل الألمانية على سبيل المثال ، ليس هناك دائما واحد إلى واحد رسم الخرائط بين أقل الأحرف الكبيرة.إن "esset" صغيرة (حرف يشبه الحرف اليوناني بيتا) تتحول إلى "SS" في أحرف كبيرة.

إذا كان لديك دفعة ، ثم فقد أبسط طريقة.إلقاء نظرة على to_upper()/to_lower() في تعزيز سلسلة الخوارزميات.

لقد وجدت طريقة لتحويل حالة unicode (متعدد اللغات) حرفا, ولكن عليك أن تعرف/العثور على (بطريقة أو بأخرى) لغة الحرف:

#include <locale.h>

_locale_t locale = _create_locale(LC_CTYPE, "Greek");
AfxMessageBox((CString)""+(TCHAR)_totupper_l(_T('α'), locale));
_free_locale(locale);

لم أجد طريقة لفعل ذلك حتى الآن...أنا شخص يعرف كيف, اسمحوا لي أن أعرف.

تعيين الإعدادات المحلية إلى NULL لا يعمل...

على VCL لديه SysUtils.hpp الذي LowerCase(unicodeStringVar) و UpperCase(unicodeStringVar) والتي قد عمل لك.أنا استخدم هذا في C++ Builder 2009.

ما ستيف يقول هو الحق ، ولكن أعتقد أنه إذا كان رمز إلى دعم عدة لغات, هل يمكن أن يكون مصنع الطريقة التي تلخص مجموعة من الأساليب التي تفعل ذات الصلة toUpper أو toLower على أساس أن اللغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top