सी स्ट्रिंग संघनन

C String Concatenation



Concatenation दूसरी स्ट्रिंग को पहली स्ट्रिंग के अंत में जोड़ने की प्रक्रिया है। इस लेख में हम चर्चा करने जा रहे हैं कि विभिन्न तरीकों का उपयोग करके सी में स्ट्रिंग्स को कैसे जोड़ा जाए।

स्ट्रिंग को संयोजित करने के लिए उपयोग किया जाने वाला मानक C लाइब्रेरी फ़ंक्शन strcat () है।







फंक्शन प्रोटोटाइप:

$char * strcat (str1,str2);

जहां str1 पहली स्ट्रिंग है और str2 दूसरी स्ट्रिंग है। फ़ंक्शन का रिटर्न मान, संयोजित स्ट्रिंग का सूचक है।



अब, उदाहरण की सहायता से हम देखेंगे कि संयोजन कैसे किया जाता है।



उदाहरण 1:

$ strcat (str1,str2);
जहां str1 बेला है
str2 व्हिटमैन है

स्ट्रिंग के संयोजन के बाद,पहली स्ट्रिंग होगी

str1 बेला व्हिटमैन
str2 व्हिटमैन

जबकि string2 वही रहेगा।





उदाहरण २:

$ strcat (str2,str1);
जहां str1 बेला है
str2 व्हिटमैन है

स्ट्रिंग के संयोजन के बाद,संयोजित स्ट्रिंग होगी

str1 बेला
str2 बेला व्हिटमैन

जबकि string1 वही रहेगा।

सी हैडर फ़ाइल में घोषणा

हेडरफाइल के तहत स्ट्रिंग हैंडलिंग फ़ंक्शन घोषित किए जाते हैं। यदि कोई संयोजन करने के लिए मानक फ़ंक्शन का उपयोग करना चाहता है, तो इस शीर्षलेख फ़ाइल को शामिल करने की आवश्यकता है।



इसलिए, हम दो तरह से स्ट्रिंग कॉन्सटेनेशन प्राप्त कर सकते हैं। एक मानक सी लाइब्रेरी फ़ंक्शन का उपयोग करने के साथ है और दूसरा सी लाइब्रेरी फ़ंक्शन का उपयोग किए बिना है। दोनों तरीकों को प्रदर्शित करने के लिए उदाहरण कार्यक्रम निम्नलिखित हैं। सी लाइब्रेरी फ़ंक्शन का उपयोग किए बिना स्ट्रिंग संयोजन को कई तरीकों से लागू किया जा सकता है।

हम इस पर भी उदाहरण के साथ आने वाले खंडों में चर्चा करेंगे।

सी लाइब्रेरी फंक्शन का उपयोग करके दो स्ट्रिंग्स का संयोजन

#शामिल

#शामिल

#परिभाषित करें BUF_SIZE 256
NSमुख्य()
{
charएस 1[BUF_SIZE],एस 2[BUF_SIZE]; /* दो स्ट्रिंग बफ़र्स */

printf ('पहली स्ट्रिंग दर्ज करें'एन'); ] /* पहली स्ट्रिंग इनपुट करने के लिए उपयोगकर्ता के लिए कंसोल पर संदेश प्रिंट करें*/
fgets (एस 1,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट स्ट्रिंग को S1 बफ़र में संग्रहीत करें */
एस 1[ स्ट्रेलेन (एस 1)-1] = ' 0';

printf ('दूसरा स्ट्रिंग दर्ज करें'एन');/* दूसरी स्ट्रिंग इनपुट करने के लिए उपयोगकर्ता को संदेश प्रिंट करें*/
fgets (एस 2,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट स्ट्रिंग को S2 बफ़र में संग्रहीत करें */
एस 2[ स्ट्रेलेन (एस 2)-1] = ' 0';

strcat (एस 1,एस 2); /*S1 और S2 स्ट्रिंग्स के साथ मानक फ़ंक्शन को कॉल करें */

printf ('एनसंयोजित स्ट्रिंग %s . हैएनएन',एस 1); /*आउटपुट : S1 S2 के साथ जुड़ जाता है */

वापसी 0;
}

कार्यक्रम और आउटपुट के स्नैपशॉट:

पाठ विवरण स्वचालित रूप से उत्पन्न

पाठ विवरण स्वचालित रूप से मध्यम विश्वास के साथ उत्पन्न होता है

लाइब्रेरी फ़ंक्शन का उपयोग किए बिना दो स्ट्रिंग्स का संयोजन

पहली स्ट्रिंग के अंत में दूसरी स्ट्रिंग को कॉपी करने के लिए लूप का उपयोग करना।

#शामिल

#शामिल

#परिभाषित करें BUF_SIZE 256
NSमुख्य()
{
charएस 1[BUF_SIZE],एस 2[BUF_SIZE]; /* दोनों स्ट्रिंग के लिए बफ़र्स S1, S2 घोषित करें*/
NSलंबाई= 0,मैं,जे; /*लूप ट्रैवर्सल के लिए आवश्यक चर*/

printf ('पहली स्ट्रिंग दर्ज करें'); /* पहली स्ट्रिंग दर्ज करने के लिए उपयोगकर्ता संदेश प्रिंट करें */
fgets (एस 1,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट स्ट्रिंग S1*/ में संग्रहीत की जाएगी
एस 1[ स्ट्रेलेन (एस 1)-1] = ' 0';

printf ('दूसरी स्ट्रिंग दर्ज करें'); /* दूसरी स्ट्रिंग दर्ज करने के लिए उपयोगकर्ता संदेश प्रिंट करें */
fgets (एस 2,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट स्ट्रिंग S2*/ में संग्रहीत की जाएगी
एस 2[ स्ट्रेलेन (एस 2)-1] = ' 0';
/* S1*/ की लंबाई ज्ञात करने के लिए पहली स्ट्रिंग को पार करें
के लिये(मैं=0;एस 1[मैं]! =' 0';मैं++)
{
लंबाई=लंबाई+1;
}

/*लंबाई में S1 का अंत होगा, लंबाई से शुरू करें और पूरे S2 को S1 में कॉपी करें */
के लिये(मैं=लंबाई,जे=0;एस 2[जे]! =' 0';मैं++,जे++)
{
एस 1[मैं]=एस 2[जे];
एस 1[मैं]=' 0';
}

/*S1 प्रिंट करें, संयोजित परिणाम */
printf ('एनसंयोजित स्ट्रिंग %s . हैएनएन',एस 1);
वापसी 0;
}

कार्यक्रम और आउटपुट के स्नैपशॉट:

पाठ विवरण स्वचालित रूप से उत्पन्न

पाठ विवरण स्वचालित रूप से उत्पन्न

पुस्तकालय समारोह के बिना एक और तरीका

प्रत्यावर्तन का उपयोग कर संघनन:

स्ट्रिंग 1 की लंबाई प्राप्त करने के लिए फ़ंक्शन stringconcatenate() का उपयोग किया जाएगा। यदि S2 खाली है तो S2 को एक अशक्त वर्ण असाइन किया जाएगा।

यदि S1 के अंत में S2 के तत्व को जोड़ने की तुलना में S2 को अशक्त वर्ण असाइन नहीं किया गया है, जो S1 [i + j] = S2 [j] है, तो इससे स्ट्रिंग में i का मान बढ़ जाता है।

एक तर्क के रूप में सुधारित तार (S1,S2) को पारित करके एक फ़ंक्शन को स्वयं बुलाया जाएगा। S2 के खाली होने तक इसे बार-बार कॉल किया जाएगा।

संक्षिप्त S1 मुख्य () के रूप में मुद्रित किया जाएगा

#शामिल

#शामिल

#परिभाषित करें BUF_SIZE 256

/* उपरोक्त विवरण के अनुसार स्ट्रिंग संयोजन को लागू करने के लिए पुनरावर्ती कार्य */
शून्यस्ट्रिंगकॉन्केनेट(char *एस 1,char *एस 2)
{
स्थिर NSमैं=0;
स्थिर NSजे;
जे= स्ट्रेलेन (एस 1);
अगर(!एस 2[मैं])
{
एस 2[मैं]=' 0';
}
अन्यथा
{
एस 1[जे] =एस 2[मैं];
एस 1[जे+1] = ' 0';
मैं++;
स्ट्रिंगकॉन्केनेट(एस 1,एस 2);
}
}
NSमुख्य()
{
charएस 1[BUF_SIZE],एस 2[BUF_SIZE];

printf ('पहली स्ट्रिंग का मान दर्ज करें:'); /* पहली स्ट्रिंग इनपुट करने के लिए उपयोगकर्ता संदेश */
fgets (एस 1,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट पहली स्ट्रिंग, S1 में स्टोर करें */
एस 1[ स्ट्रेलेन (एस 1)-1] = ' 0';

printf ('दूसरी स्ट्रिंग का मान दर्ज करें:'); /* दूसरी स्ट्रिंग इनपुट करने के लिए उपयोगकर्ता संदेश */
fgets (एस 2,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट पहली स्ट्रिंग, S2 में स्टोर करें */
एस 2[ स्ट्रेलेन (एस 2)-1] = ' 0';

स्ट्रिंगकॉन्केनेट(एस 1,एस 2); /* फ़ंक्शन को S1,S2 के साथ पैरामीटर के रूप में कॉल करें */

printf ('स्ट्रिंग्स का संयोजन ='%s'एन',एस 1);
वापसी 0;
}

कार्यक्रम और आउटपुट के स्नैपशॉट:

पाठ विवरण स्वचालित रूप से उत्पन्न

पाठ विवरण स्वचालित रूप से उत्पन्न

फ़ंक्शंस का उपयोग करके संयोजन

फ़ंक्शन strconcatenate () को दो स्ट्रिंग्स को संयोजित करने के लिए मुख्य () द्वारा कॉल किया जाता है।

स्ट्रिंगलेन (स्ट्रिंग 1) का उपयोग करके फ़ंक्शन को स्ट्रिंग 1 की लंबाई मिलती है।

string2[i] के तत्वों को string1[i+j] में जोड़ें। यह चरण तब तक दोहराया जाएगा जब तक कि स्ट्रिंग खाली न हो जाए। यहां, हम string1 के अंत में string2 को string1 से जोड़ते हैं।

जब लूप के लिए सभी पुनरावृत्तियों का प्रदर्शन किया जाएगा, तो अंत तक कॉनटेनेटेड स्ट्रिंग (स्ट्रिंग 1) प्राप्त हो जाएगी।

मुख्य () समवर्ती स्ट्रिंग S1 को प्रिंट करता है

#शामिल

#शामिल

#परिभाषित करें BUF_SIZE 256

/* उपरोक्त विवरण के अनुसार स्ट्रिंग संयोजन को लागू करने के लिए कार्य करता है */
शून्यमजबूत करना(char *स्ट्रिंग1, char*स्ट्रिंग2)
{
NSमैं;
NSजे= स्ट्रेलेन (स्ट्रिंग1);
के लिये(मैं=0;डोरी2[मैं];मैं++)
{
स्ट्रिंग1[मैं+जे]=स्ट्रिंग2[मैं];
}
स्ट्रिंग1[मैं+जे]= ' 0';
}
NSमुख्य()
{
charस्ट्रिंग1[BUF_SIZE],स्ट्रिंग2[BUF_SIZE];
printf ('पहली स्ट्रिंग दर्ज करें:'); /* पहली स्ट्रिंग के लिए उपयोगकर्ता संदेश */
fgets (स्ट्रिंग1,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट दूसरी स्ट्रिंग, स्ट्रिंग 1 में संग्रहीत */
स्ट्रिंग1[ स्ट्रेलेन (स्ट्रिंग1)-1] = ' 0';

printf ('दूसरा स्ट्रिंग दर्ज करें:'); /* दूसरी स्ट्रिंग के लिए उपयोगकर्ता संदेश */
fgets (स्ट्रिंग2,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट दूसरी स्ट्रिंग , string2 में संग्रहीत */
स्ट्रिंग2[ स्ट्रेलेन (स्ट्रिंग2)-1] = ' 0';

मजबूत करना(स्ट्रिंग1,स्ट्रिंग2); /* फ़ंक्शन को स्ट्रिंग1 और स्ट्रिंग2 के साथ तर्क के रूप में कॉल करें*/

printf ('परिणामी स्ट्रिंग =%s'एन',स्ट्रिंग1);
वापसी 0;
}

कार्यक्रम और आउटपुट के स्नैपशॉट:

पाठ विवरण स्वचालित रूप से उत्पन्न

पाठ विवरण स्वचालित रूप से उत्पन्न

memcpy . का उपयोग करके स्ट्रिंग संयोजन

memcpy() फ़ंक्शन का उपयोग करके, स्ट्रिंग का संयोजन एक स्ट्रिंग बफर से दूसरे स्ट्रिंग बफर के अंत तक शब्द की प्रतिलिपि बनाकर किया जाता है, जहां शब्द का आकार 4 बाइट्स है, यह देखते हुए कि हम 32 बिट मशीन पर चल रहे हैं, जबकि जब हम स्ट्रिंग कॉन्सटेनेशन करते हैं strcat() फ़ंक्शन का उपयोग करके स्ट्रिंग कॉन्सटेनेशन का उपयोग करके, एक स्ट्रिंग बफर से दूसरे स्ट्रिंग बफर में बाइट द्वारा बाइट कॉपी करके कॉन्सटेनेशन किया जाता है।

यह दृष्टिकोण प्रदर्शन कुशल है।

memcpy का उपयोग करते समय एकमात्र विचार ' 0' का ख्याल रखना है।

सी प्रोग्राम memcpy के साथ स्ट्रैट हासिल करने के लिए:

#शामिल

#शामिल

#परिभाषित करें BUF_SIZE 256

शून्य strcat_memcpy(char *एस 1, char *एस 2)
{
NSलंबाई1,लंबाई2;
लंबाई1= स्ट्रेलेन (एस 1);
लंबाई2= स्ट्रेलेन (एस 2);
memcpy (एस 1+लंबाई1,एस 2,लंबाई2);
}
NSमुख्य()
{

charस्ट्रिंग1[BUF_SIZE],स्ट्रिंग2[BUF_SIZE];
printf ('पहली स्ट्रिंग दर्ज करें:'); /* पहली स्ट्रिंग के लिए उपयोगकर्ता संदेश */
fgets (स्ट्रिंग1,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट दूसरी स्ट्रिंग, स्ट्रिंग 1 में संग्रहीत */
स्ट्रिंग1[ स्ट्रेलेन (स्ट्रिंग1)-1] = ' 0';

printf ('दूसरा स्ट्रिंग दर्ज करें:'); /* दूसरी स्ट्रिंग के लिए उपयोगकर्ता संदेश */
fgets (स्ट्रिंग2,BUF_SIZE,स्टडिन); /* उपयोगकर्ता इनपुट दूसरी स्ट्रिंग , string2 में संग्रहीत */
स्ट्रिंग2[ स्ट्रेलेन (स्ट्रिंग2)-1] = ' 0';

strcat_memcpy(स्ट्रिंग1,स्ट्रिंग2); /* फ़ंक्शन को स्ट्रिंग1 और स्ट्रिंग2 के साथ तर्क के रूप में कॉल करें*/

printf ('परिणामी स्ट्रिंग =%s'एन',स्ट्रिंग1);
वापसी 0;


}

कार्यक्रम और आउटपुट के स्नैपशॉट:

पाठ विवरण स्वचालित रूप से उत्पन्न

पाठ विवरण स्वचालित रूप से उत्पन्न

निष्कर्ष:

इस सारी चर्चा के साथ हम सी में स्ट्रिंग कॉन्सटेनेशन को समाप्त कर सकते हैं। हमने स्ट्रिंग कॉन्सटेनेशन के लिए कई उदाहरण और नमूना कार्यक्रम देखे हैं। हम मुख्य वस्तुओं को याद करेंगे: दो तरीके हैं, एक सी मानक के साथ और दूसरा उपयोगकर्ता परिभाषित तरीका है। उपयोगकर्ता परिभाषित कई प्रकार के हो सकते हैं, यह इस बात पर निर्भर करता है कि उपयोगकर्ता स्ट्रिंग संयोजन को कैसे कार्यान्वित करना चाहता है।