सी ++ स्ट्रिंग्स



तार

C ++ हमारे प्रोग्राम में स्ट्रिंग्स बनाने और उपयोग करने के तीन मूल तरीके प्रदान करता है:

  1. चार तत्वों की एक सरणी का उपयोग करना
  2. का प्रयोग string कक्षा
  3. का प्रयोग wchar_t विस्तृत पात्रों के लिए

वर्णों की सरणी

स्ट्रिंग पात्रों का एक क्रम है। char C ++ में एक एकल वर्ण का प्रतिनिधित्व करने के लिए डेटा प्रकार का उपयोग किया जाता है। इसलिए यदि आप अपने प्रोग्राम में एक स्ट्रिंग का उपयोग करना चाहते हैं तो आप एक वर्ण का उपयोग कर सकते हैं। वर्णों की एक सरणी का उपयोग करके स्ट्रिंग की घोषणा और परिभाषा किसी अन्य डेटा प्रकार के सरणी की घोषणा और परिभाषा के समान है:

//define an array of chars with 10 elements
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

कोई भी स्ट्रिंग एक समाप्ति नल वर्ण '\ 0' के साथ समाप्त होती है। इस तरह से एक सरणी परिभाषा में अंतिम तत्व के रूप में अशक्त वर्ण '\ 0' शामिल होना चाहिए। उपरोक्त मामले में एक सरणी की क्षमता 10 है, लेकिन हमने इसका केवल 8 उपयोग किया है। किसी सरणी के शेष दो वर्णों को परिभाषित नहीं किया जाएगा।

नीचे दिखाए गए अनुसार गतिशील लंबाई के वर्णों की एक सरणी को घोषित करने और परिभाषित करने का दूसरा तरीका:

char msg2[] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

उपरोक्त मामले में आवंटित स्मृति की मात्रा पात्रों के अनुक्रम को संग्रहीत करने के लिए आवश्यक रूप से समान होगी।

वर्णों की एक सारणी को आरम्भ करने का सबसे सरल तरीका है कि डबल कोट्स में स्ट्रिंग शाब्दिक का उपयोग नीचे दिखाया गया है:

char msg3[] = "Message";

आप फ़ंक्शंस का उपयोग करके चार सरणियों पर कुछ बुनियादी संचालन कर सकते हैं सी स्ट्रिंग पुस्तकालय जैसे:

एक स्ट्रिंग को दूसरे में कॉपी करें

strcpy_s(destination, source)

नीचे उपयोग करने का डेमो है strcpy_s
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };
char dest[20];
strcpy_s(dest, msg);
cout << "String copied from msg = " << dest << endl;

उपरोक्त उदाहरण का आउटपुट नीचे दिखाया गया है

संदेश = संदेश से कॉपी की गई स्ट्रिंग

एक स्ट्रिंग को दूसरे से कनेक्ट करें

strcat_s(string1, string2)

string2 को string1 के अंत में जोड़ा जाएगा
//declare 2 messages
char string1[20] = "Good";
char string2[] = " Morning";
//concatenate strings
strcat_s(string1, string2);
cout << string1 << endl;

कार्यक्रम के ऊपर आउटपुट ओएस होगा:

शुभ प्रभात

नोट: स्ट्रिंग 1 के साथ इसे संक्षिप्त करने के लिए आपको स्ट्रिंग 2 में पर्याप्त खाली स्थान होना चाहिए।

स्ट्रिंग की लंबाई प्राप्त करें

strlen(string)

cout << "Length of the string 2 is " << strlen(string2) << endl;

उपरोक्त कोड का आउटपुट होगा

स्ट्रिंग 2 की लंबाई 8 है

स्ट्रिंग: "मॉर्निंग" 7 वर्णों और 8 में संग्रहीत हैth चरित्र अशक्त चरित्र है - '0'

दो तार की तुलना करें

strcmp(string1, string2)

यह समारोह लौटेगा 0, अगर तार बराबर हैं; नकारात्मक मान, अगर string1 है कम string2 से और सकारात्मक मान अगर string1 है अधिक से अधिक string2 से।
//declare two strings
char str1[100];
char str2[100];
//get user input of strings:
cout << "Please enter the first string\n";
cin >> str1;
cout << "Please enter the second string\n";
cin >> str2;
//compare strings
int result = strcmp(str1, str2);
if (result == 0)
{
	//strings are equals
	cout << str1 << " is equal to " << str2 << endl;
}
else
{
	if (result > 0)//str1 is greater
		cout << str1 << " is greater than " << str2 << endl;
	else//str2 is greater
		cout << str1 << " is less than " << str2 << endl;
}

नीचे उपरोक्त कार्यक्रम का आउटपुट है


कृपया पहली स्ट्रिंग दर्ज करें
एबीसी
कृपया दूसरा स्ट्रिंग दर्ज करें
अब्द
abc पेट से कम है

स्ट्रैम्प लेक्सिकोग्राफ़िक (वर्णमाला) क्रम में तार की तुलना करता है। तार के लिए "से कम" का अर्थ है कि "बिल्ली" "कुत्ते" से कम है क्योंकि "बिल्ली" "कुत्ते" से पहले वर्णानुक्रम में आती है।

स्ट्रिंग क्लास

मानक C ++ लाइब्रेरी द्वारा प्रदान की गई कक्षा का उपयोग करके स्ट्रिंग्स का प्रतिनिधित्व करने का एक और तरीका। इस वर्ग का नाम है string और C ++ में char सरणियों की तुलना में इसकी अधिक कार्यक्षमता है। अपने कार्यक्रमों में "स्ट्रिंग" वर्ग का उपयोग करना आपको अधिक क्षमता प्रदान करता है। अपने प्रोग्राम में स्ट्रिंग्स का उपयोग करने के लिए आपको निम्नलिखित विवरण जोड़ना होगा:

#include <string>

इस हेडर फ़ाइल को शामिल करने के बाद आप अपने प्रोग्राम में स्ट्रिंग ऑब्जेक्ट्स का उपयोग कर पाएंगे। यहाँ एक स्ट्रिंग को घोषित करने और परिभाषित करने के उदाहरण दिए गए हैं:
string s1 = "Have a";
string s2 = " nice day";

के साथ काम करते हैं स्ट्रिंग कक्षा बहुत आसान है।

कॉनटेटनेट स्ट्रिंग्स

तार को समतल करने के लिए, प्लस चिह्न का उपयोग करें:

string s3 = s1 + s2;
cout << s3 << endl;

नीचे उपरोक्त कोड का आउटपुट है

आपका दिन अच्छा हो

एक स्ट्रिंग की लंबाई

एक स्ट्रिंग की लंबाई प्राप्त करने के लिए, उदाहरण के लिए, "s3", आप निम्न फ़ंक्शन का उपयोग कर सकते हैं

s3.length()

स्ट्रिंग की लंबाई प्राप्त करने का उदाहरण
cout << "Length of s3 is " << s3.length() << endl;

नीचे उपरोक्त कोड का आउटपुट है

S3 की लंबाई 15 है

एक स्ट्रिंग को दूसरे में कॉपी करें

एक स्ट्रिंग को दूसरे में कॉपी करने के लिए बस असाइनमेंट ऑपरेटर का उपयोग करें

string s4 = s2;
cout << s4 << endl;

नीचे कोड से ऊपर आउटपुट ओएस है

अच्छा दिन

स्ट्रिंग को निरंतर वर्ण सरणी में बदलें

कभी-कभी यह स्ट्रिंग ऑब्जेक्ट को निरंतर चार सरणी में बदलने के लिए उपयोगी होता है। आप इसका उपयोग करके कर सकते हैं c_str() नीचे दिखाए अनुसार कार्य करें

const char* cstr = s3.c_str();

जाँच करें कि स्ट्रिंग खाली है या नहीं

आप का उपयोग कर सकते हैं empty() स्ट्रिंग खाली है या नहीं यह निर्धारित करने के लिए स्ट्रिंग का कार्य। यदि एक स्ट्रिंग खाली है, तो कार्य करें खाली () वापस होगा true अन्यथा false

नीचे कोड दिखाया गया है कि कैसे उपयोग करना है empty()

if (s4.empty())
	cout << "s4 is empty" << endl;
else
	cout << s4 << endl;

स्ट्रिंगर को हेरफेर करने के लिए स्ट्रिंगर वर्ग प्रोग्रामर के लिए बहुत सारी क्षमताएं प्रदान करता है, लेकिन हम अब केवल बुनियादी चीजों पर चर्चा कर रहे हैं। हम अगले विषयों में स्ट्रिंग क्लास के बारे में अधिक जानकारी देंगे।

चौड़ा चरखा wchar_t

चौड़ा पात्र wchar_t एक डेटा प्रकार है जिसका आकार साधारण वर्ण डेटा प्रकार से अधिक है। यह डेटाटाइप "2 या 4" बाइट्स रखता है। यह प्रकार स्ट्रिंग्स का प्रतिनिधित्व करने के लिए विस्तारित चरित्र सेट का उपयोग करने की क्षमता प्रदान करता है। ज्यादातर wchar_t डेटाटाइप का उपयोग तब किया जाता है जब चीनी, जापानी जैसी अंतर्राष्ट्रीय भाषाओं का उपयोग किया जाता है। C ++ प्रतिनिधित्व करने के लिए डेटा प्रकार में निर्मित प्रदान करता है wchar_t विस्तृत वर्ण।

विस्तृत वर्ण चर की घोषणा निम्नलिखित तरीके से की जा सकती है:

wchar_t wideString;

विस्तृत वर्णों की एक सरणी का उपयोग करने के लिए आपको नीचे दिखाए गए अनुसार wchar_t की एक सरणी घोषित करनी होगी:
wchar_t wideString[100];

काम साथ में करने केलिए wchar_t प्रकार आपको शामिल करना है वच आपके कार्यक्रम में पुस्तकालय जैसा कि नीचे दिखाया गया है:
#include <wchar.h>

Wchar पुस्तकालय विस्तृत वर्णों के साथ काम करने के लिए विभिन्न कार्यों और स्थिरांक प्रदान करता है। में कई स्थिरांक हैं वच पुस्तकालय:
  • NULL - निरर्थक पॉइंटर निरंतर का प्रतिनिधित्व करता है।
  • WCHAR_MAX - व्हकर_टी के अधिकतम मूल्य का प्रतिनिधित्व करता है
  • WCHAR_MIN - wchar_t का न्यूनतम मूल्य दर्शाता है।
  • WEOF - फ़ाइल के अंत को इंगित करने के लिए निरंतर उपयोग किया जाता है।

एक विस्तृत चरित्र स्ट्रिंग के लिए एक मूल्य निर्दिष्ट करने के लिए जिसका आपको उपयोग करना है तलवार चलानासमारोह:

int swprintf (wchar_t*  destinationString, size_t length, const wchar_t* formatString, ...);

यहाँ पैरामीटर हैं:
  • डेस्टिनेशन स्ट्रिंग - विस्तृत वर्ण जो स्वरूपित डेटा को रखेगा। यह wchar_t की एक सरणी या एक एकल विस्तृत वर्ण हो सकता है।
  • लंबाई - वर्णों की संख्या लिखी गई। आपको स्ट्रिंग के अंत में अशक्त चरित्र के लिए स्ट्रिंग की लंबाई को एक से बढ़ाना याद रखना चाहिए।
  • प्रारूप स्ट्रिंग - स्ट्रिंग का उपयोग प्रारूप के अनुसार डेटा लिखने के लिए किया जाता है।
  • … - प्रारूप स्ट्रिंग के साथ उपयोग किए जाने वाले पैरामीटर।

सफलता पर इस फ़ंक्शन का रिटर्न मान अक्षरों की संख्या लिखा गया है।

नीचे एक उदाहरण है

swprintf(wideString, 6, L"HELLO");

उपरोक्त मामले में, प्रारूप स्ट्रिंग एक सरल स्ट्रिंग है और "HELLO" से पहले "L" वर्ण का उपयोग स्ट्रिंग को परिवर्तित करने के लिए किया जाता है const wchar_t*

अगला उदाहरण दिखाता है कि प्रारूप विनिर्देशक के साथ प्रारूप स्ट्रिंग का उपयोग कैसे करें:

swprintf(myMessage, 13, L"My age is %d ", 20);

उपरोक्त मामले में मेरा संदेश चर में शामिल होंगे “मेरी उम्र 20 है".

कुछ प्रारूप विनिर्देशकों की सूची निम्न तालिका में दर्शाई गई है:

 विनिर्देशकप्रकार
 घ, मैंदशमलव या पूर्णांक। तर्क पूर्णांक मान है
 Uनिरुपित पूर्णांक
 Oअष्टक पूर्णांक
 एक्स, एक्सहेक्साडेसिमल पूर्णांक
 Fफ़्लोटिंग पॉइंट मान
 Eवैज्ञानिक फ्लोटिंग पॉइंट
 cचरित्र
 sतार
 nसूचक को int

विस्तृत वर्ण मुद्रित करने के लिए हमें उपयोग करना चाहिए wpritnf समारोह:

int wprintf (const wchar_t* formatString, ...);

wprintf निर्दिष्ट प्रारूप के साथ मानक आउटपुट में विस्तृत वर्ण लिखते हैं। उदाहरण के लिए, हम ऊपर दिए गए कोड में उपयोग किए गए दो चौड़े वर्ण तार के मान को नीचे की तरह प्रिंट कर सकते हैं
wprintf(wideString);
wprintf(myMessage);

मानक वर्णों में विस्तृत वर्ण लिखने के लिए जिनका आप उपयोग कर सकते हैं wcout जिस तरह से आपने उपयोग किया है उसी तरह से ऑब्जेक्ट cout आउटपुट डेटा के लिए।
wcout << "Use of wcout " << wideString << endl;

कंसोल से एक विस्तृत वर्ण पढ़ने के लिए आपको उपयोग करना होगा wcin के बजाय cin
wchar_t name[50];
cout << "Enter your name" << endl;
wcin >> name;
cout << endl << "Your name is ";
wprintf(L"%s", name);