सी ++ में लोअर/ऊपरी स्ट्रिंग

लोगों को सी ++ में लोअर केस/अपर केस के लिए स्ट्रिंग करने का सबसे अच्छा तरीका क्या है?

मुद्दा इस तथ्य से जटिल है कि सी ++ अंग्रेजी केवल प्रोग्रामिंग भाषा नहीं है। क्या कोई अच्छी बहुभाषी विधि है?

0
ro fr bn
ध्यान रखें कि वर्तमान समाधान यूनिकोड संगत नहीं है।
जोड़ा लेखक sorin, स्रोत

8 उत्तर

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

http://notfaq.wordpress.com/2007/08/04/cc-परिवर्तित-स्ट्रिंग करने वाली upperlower दर-मामला/

Also, CodeProject article for common string methods: http://www.codeproject.com/KB/stl/STL_string_util.aspx

0
जोड़ा
मुझे लगता है कि स्मार्ट कोट्स के बजाए एक स्ट्रिंग शाब्दिक के उदाहरण में "गूंगा उद्धरण" का उपयोग करना बेहतर है? यह कॉपी-पेस्ट-संकलन के मामले में बेहतर बनाता है।
जोड़ा लेखक Ron Klein, स्रोत
आपको कहना चाहिए कि ट्रांसफॉर्म का उपयोग करने के लिए किसी को # शामिल <एल्गोरिदम> की आवश्यकता है
जोड़ा लेखक c0m4, स्रोत
गैर-ASCII तारों के लिए यह कैसे काम करेगा?
जोड़ा लेखक Nikolai, स्रोत

VCL में SysUtils.hpp है जिसमें लोअरकेस (यूनिकोड स्ट्रिंगवार) और अपरकेस (यूनिकोड स्ट्रिंगवार) है जो इसके लिए काम कर सकता है आप। मैं इसे सी ++ बिल्डर 200 में उपयोग करता हूं।

0
जोड़ा

मुझे यूनिकोड (और बहुभाषी) वर्णों के मामले को बदलने का एक तरीका मिला है, लेकिन आपको चरित्र के लोकेल को जानने/ढूंढने की आवश्यकता है:

#include 

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

मुझे अभी तक ऐसा करने का कोई रास्ता नहीं मिला है ... मैं जानता हूं कि कैसे, मुझे बताएं।

लोकल को न्यूल में सेट करना काम नहीं करता है ...

0
जोड़ा
> std::string data = ?Abc?; 
> std::transform(data.begin(), data.end(), data.begin(), ::toupper);

यह काम करेगा, लेकिन यह मानक "सी" लोकेल का उपयोग करेगा। यदि आप किसी अन्य लोकेल के लिए टोलर प्राप्त करने की आवश्यकता है तो आप पहलुओं का उपयोग कर सकते हैं। पहलू का उपयोग कर उपरोक्त कोड होगा:

locale loc("");
const ctype& ct = use_facet >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype::tolower), &ct));
0
जोड़ा
अच्छा सूचक धन्यवाद!
जोड़ा लेखक viksit, स्रोत

यदि आपके पास बूस्ट है, तो इसका सबसे आसान तरीका है। to_upper ()/to_lower() पर एक नज़र डालें बूस्ट स्ट्रिंग एल्गोरिदम में

0
जोड़ा

जैसा कि डैरेन ने आपको बताया था, std :: transform का उपयोग करने का सबसे आसान तरीका है।

लेकिन सावधान रहें कि कुछ भाषा में, उदाहरण के लिए जर्मन की तरह, निचले और अपरकेस के बीच हमेशा एक मैपिंग नहीं होता है। "निबंध" लोअरकेस चरित्र (ग्रीक चरित्र बीटा की तरह दिखता है) को अपरकेस में "एसएस" में बदल दिया गया है।

0
जोड़ा

आपको इस प्रश्न की भी समीक्षा करनी चाहिए। असल में समस्या यह है कि यूनिकोड डेटा को संभालने के लिए मानक सी/सी ++ पुस्तकालयों का निर्माण नहीं किया गया था, इसलिए आपको अन्य पुस्तकालयों को देखना होगा।

यह बदल सकता है क्योंकि सी ++ मानक अपडेट किया गया है। मुझे पता है कि बोर्लैंड (कोडगियर) के अगले कंपाइलर में यूनिकोड समर्थन होगा, और मुझे लगता है कि माइक्रोसॉफ्ट के सी ++ कंपाइलर के पास पहले से ही स्ट्रिंग लाइब्रेरीज़ हैं जो यूनिकोड का समर्थन करती हैं।

0
जोड़ा

स्टीव का कहना है कि सही है, लेकिन मुझे लगता है कि अगर आपके कोड को कई भाषाओं का समर्थन करना पड़ा, तो आपके पास एक फैक्ट्री विधि हो सकती है जो उस भाषा के आधार पर अपरिपक्व या टोलर के लिए प्रासंगिक तरीकों के एक सेट को समाहित करे।

0
जोड़ा