मैं मिश्रित केस स्ट्रिंग को C में लोअरकेस स्ट्रिंग में कैसे बदल सकता हूं?
strlwr((char*)str);
यह सिर्फ स्ट्रिंग के माध्यम से जाता है और इसे स्वयं में परिवर्तित करता है।
मैं मिश्रित केस स्ट्रिंग को C में लोअरकेस स्ट्रिंग में कैसे बदल सकता हूं?
strlwr((char*)str);
यह सिर्फ स्ट्रिंग के माध्यम से जाता है और इसे स्वयं में परिवर्तित करता है।
जवाबों:
यह मानक पुस्तकालय में है, और यह सबसे सीधा तरीका है जो मैं इस तरह के फ़ंक्शन को लागू करने के लिए देख सकता हूं। तो हाँ, स्ट्रिंग के माध्यम से लूप करें और प्रत्येक वर्ण को लोअरकेस में बदलें।
कुछ इस तरह तुच्छ:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
या यदि आप एक लाइनर पसंद करते हैं, तो आप जेएफ सेबेस्टियन द्वारा इस का उपयोग कर सकते हैं:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
अधिक मुहावरेदार लगता है।
char *
, लेकिन अगर str एक char अरेंजमेंट नहीं है। उसके लिए कोई स्पष्टीकरण मिला?
यदि आप ASCII के लिए खुद को प्रतिबंधित करते हैं, तो निचले मामले में परिवर्तित होने के लिए बिट 0x60 के बराबर है:
for(char *p = pstr; *p; ++p)
*p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
for(char *p = pstr;*p;++p) *p=*p>='A'&&*p<='Z'?*p|0x60:*p;
tolower()
। मेरी मशीन पर 55.2 बनाम 44.15।
int (*)(int)
हस्ताक्षर हैं। यहाँ प्रदर्शन माप के लिए इस्तेमाल किया गया कोड gist.github.com/370497
क्या आप सिर्फ ASCII स्ट्रिंग्स के साथ काम कर रहे हैं, और कोई स्थानीय मुद्दे नहीं हैं? फिर हां, यह करने का एक अच्छा तरीका होगा।
tolower()
तर्क को अपरिवर्तित छोड़ देता है यदि वह 'ए' .. 'जेड' श्रेणी में नहीं है।
यदि आपको निचले केस फ़ंक्शन में यूनिकोड समर्थन की आवश्यकता है, तो यह प्रश्न देखें: लाइट सी यूनिकोड लाइब्रेरी
यदि हम उपयोग के रूप में के रूप में मैला होने जा रहे हैं tolower()
, यह करें:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
लेकिन, ठीक है, यह थोड़े से विस्फोट करता है यदि आप इसे कुछ प्रतीकों / अंकों को खिलाते हैं, और सामान्य तौर पर यह बुराई है। अच्छा साक्षात्कार प्रश्न, हालांकि।