Character Manipulation Functions

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Character Manipulation Functions: कई बार हमें ऐसी जरूरतें पडती हैं, जिसमें किसी मान को Store तो एक Character Array के रूप में किया गया होता है, लेकिन Access करते समय उस Character Array में Stored मान को Integer या Float प्रकार के मान के रूप में Use करना होता है।

इस स्थिति में हमें उस Array में Stored मान को Integer या Float प्रकार के मान में Convert करने की जरूरत पडती है। चलिए, हम इसी प्रकार की एक समस्या का समाधान प्राप्त करने की कोशिश करते हैं। निम्न Example Program में हम एक Character Array में Stored Integer प्रकार के मान को Integer प्रकार के मान में Convert करने के लिए एक Function Create कर रहे हैं:

#include <ctype.h>
/* atoi:  convert String Integer to Numerical Integer */

int atoi(char strInteger[])
{
	int i, n, sign;

	for (i = 0; isspace(strInteger[i]); i++) /* skip white space */
			 ;
	sign = (strInteger[i] == '-') ? -1 : 1;
	if (strInteger[i] == '+' || strInteger[i] == '-') /* skip sign */
		   i++;
	for (n = 0; isdigit(strInteger[i]); i++)
	  n = 10 * n + (strInteger[i] - '0');

	return sign * n;
}

इस Function में हमने ctype.h नाम की Header File को Include किया है। इस Header File में Character Manipulation से सम्बंधित कई Functions हैं, जिन्हें हम हमारी जरूरत के आधार पर Use कर सकते हैं। जब हमें किसी Character Array में String Format में Stored String Integer को Numerical Integer में Convert करना होता है, तब हम उस Character Array को इस Function में Formal Argument के रूप में Pass करते हैं।

ये Function Argument के रूप में Calling Function से String Integer को प्राप्त करता है और उस String Integer को Numerical Integer मान में Convert करके फिर से Calling Function में Return कर देता है।

जब ये Function Call होता है, तब Argument के रूप में इसमें उस String Integer Array को भेजा जाता है, जिसमें String Format में Integer मान Stored होता है। ये Function उस मान को strInteger नाम के Array Variable में प्राप्त करता है।

किसी Character Array में जो Integer मान Store होता है, उस मान को Store करते समय String Integer मान से पहले Space का प्रयोग किया गया हो सकता है, जबकि एक Integer प्रकार के मान में कोई Space नहीं होता है। इसलिए सबसे पहले हमें किसी String Integer में स्थित Spaces को Remove करना होता है।

किसी Character Array में से Space को खोजने का काम करने के लिए हम ctype.h नाम की Header File में Define किए गए isspace() Function को Use करते हैं। ये Function उस स्थिति में True Return करता है, जब इसे किसी Character Array में Space, Tab, New Line Character या कोई अन्‍य Blank Space Character प्राप्त होता है। इस Function को निम्नानुसार एक for Loop में Use किया गया है:

for (i = 0; isspace(strInteger[i]); i++) 	/* skip white space */
           ;

इस Loop की Body नहीं है, क्योंकि इस Loop में हमें कोई Extra काम नहीं करवाना है। चूंकि इस Function में आने वाला Argument एक One-Dimensional Character Array है और किसी 1-D Array में स्थित सभी Characters को एक Index Number द्वारा Access किया जा सकता है।

इस Loop से हमारी Requirement भी यही है कि हम इस Character Array के हर Element पर जा कर ये Check करें, कि उस Index Number की Position पर कोई Space Store है या नहीं। ये Loop तब तक चलता है, जब तक Computer को Character Array में Blank Space प्राप्त होता रहता है, जैसे ही isspace() Function को Blank Space के अलावा कोई Character प्राप्त होता है, ये Function False Return करता है, जिससे Loop Terminate हो जाता है।

उदाहरण के लिए मानलो कि किसी Character Array में Integer मानों से पहले चार Space हैं, तो ये Loop चार बार चलता, जिससे Variable i का मान 3 हो जाता, जो इस बात का Signal है कि Actual Integer मान Character Array के Index Number 3 से शुरू हो रहा है।

किसी Character Array में किसी मान को Store करते समय उसके साथ Sign का चिन्ह भी Store किया गया हो सकता है। इस स्थिति में अब हमें ये Check करना होता है, कि Character Array में ‘+’ या ‘-‘ जैसा कोई चिन्ह है या नहीं। इस बात को Check करने के लिए Program में अगले Statement के रूप में निम्नानुसार एक Ternary Operator Use किया गया है:

       sign = (strInteger[i] == ‘-‘) ? -1 : 1;

मानलो कि हमारे Character Array में चार Space थे जिसे पिछले Loop का प्रयोग करके हमने Skip किया। Skip करने पर i का मान 3 हो गया] जो कि Character Array के Index Number 3 को Specify करता है। चूंकि अब Space नहीं है इसका मतलब ये है कि Space के अलावा कोई Character है और वह Character Minus (–) है या नहीं इस बात की जांच करने के लिए हमने इस Statement को लिखा है।

ये Statement Character Array के Index Number 3 को Minus Sign के लिए Check करता है और यदि Computer को इस Index Number पर Minus (‘-‘) का Character मिलता है, तो Computer sign नाम के Variable में -1 Store कर देता है, जो इस बात का संकेत होता है, कि Character Array में एक Minus Sign वाली संख्‍या Stored है। चिन्ह का पता लगाने के बाद फिर से एक Loop चलाया जाता है और ये Loop अब Character Array में Stored सभी Digits को Integer में Convert करने का काम करता है।

   for (n = 0; isdigit(strInteger[i]); i++)
       n = 10 * n + (strInteger[i] - '0');

इस Loop में हमने एक Variable n को 0 Assign किया है। फिर ctype.h नाम की Header File के isdigit() Function को Use करके Index Number i की Position पर Stored Character को इस बात के लिए Check किया है, कि वहां पर कोई Digit Stored है या नहीं।

यदि Index Number i की Position पर कोई Digit होता है, तो ये Program True Return करता है। जब ये Program True Return करता है, तब Computer for Loop के अगले Statement को Execute करता है। इस Statement में (strInteger[i] – ‘0’) Code Use किया गया है। इस Code को Use करने का कारण ये है, कि Character Array में हर Position पर किसी भी Character की ASCII Value Stored होती है।

मानलो कि Character Array में 23 Stored है, जिसे Integer में Convert करना है। इस स्थिति में वास्तव में Character Array में 2 3 Stored नहीं है बल्कि इनकी ASCII Value 50 51 Stored है। इसलिए यदि हम Directly इसे ज्यों का त्यों Use करें यानी (strInteger[i] – ‘0’) Code के स्थान पर (strInteger[i]) Code को Use करें, तो 50 को गुणा n में Stored मान 0 से होने पर 0 जो कि हमारा Required Result नहीं है।

इस स्थिति में जब हम strInteger Array के Index Number i की Location पर Character Format में Stored Digit की ASCII Value में से Integer मान 0 की ASCII Value को घटाते हैं, तो Resultant रूप में हमें Integer मान ही प्राप्त होता है।

उदाहरण के लिए मान यदि हम मान 23 के 2 की बात करें, तो 2 के ASCII Code 50 में से 0 के ASCII Code 48 के घटाने पर 2 ही प्राप्त होता है, लेकिन ये 2 एक Integer मान होता है, ना कि Character मान।

Character Array में Stored String Integer मान को Numerical Integer मान में Convert करने के बाद यदि संख्‍या Minus वाली होती है, तो मान -1 Sign नाम के Variable में Store हो जाता है, जिसका प्रयोग Function के अन्त में Return होने वाले Integer मान के Sign को Change करने के लिए किया जाता है।

जब atoi() Function से किसी Minus Sign के मान को Return करना होता है, तब sign Variable में Stored मान -1 को Return किए जाने वाले मान n से गुणा करके Resultant मान को Return कर दिया जाता है, जो कि एक Negative मान होता है।

इसी तरह से यदि हमें किसी Character Array में Stored String Formatted Float, Double, Long या किसी अन्‍य प्रकार के मान को Numerical Form में Convert करना हो, तो हम इसी तरह के Process को Use करके ये काम कर सकते हैं। वैसे इस तरह के Conversion Functions को पहले से ही Develop करके Library के रूप में हमें प्रदान कर दिया गया है, जिन्हें हम Directly Use कर सकते हैं।

किसी Character Array में Stored String को हम Reverse में Convert करने के लिए भी Function बना सकते हैं। इस Function की जरूरत उस स्थिति में पडती है, जब हम किसी मान को किसी Character Array में Store करते हैं और वह मान उस Character Array में Reverse Format में Store हो जाता है।

   /* reverse:  reverse string s in place */
   #include <string.h>
   void reverse(char str[])
   {
	  int c, i, j;
	 
	  for (i = 0, j = strlen(str)-1; i < j; i++, j--) 
	  {
		  c = str[i];
		  str[i] = str[j];
		  str[j] = c;
	  }
   }

जब इस Function में किसी Character Array को भेजा जाता है, तब वह Character Array str नाम के Argument में आकर Store हो जाता है। इस Function में एक for Loop चलाया गया है और इस for Loop में एक ही बार में एक Variable i को Increment किया गया है साथ ही दूसरे Variable j के मान को Decrement किया गया है।

Loop को इस तरह चलाया गया है कि Character Array के First Index Number को Last Index Number से Swap करता है। फिर Second Index Number के Character को Second Last Character से Swap करता है और ये प्रक्रिया तब तक चलती है, जब तक कि i का मान j के मान से ज्‍यादा नहीं हो जाता है। ये Loop तभी Terminate होता है, जब Character Array में Stored पूरी String Reverse हो जाती है। इस Function को हम निम्नानुसार Use कर सकते हैं:

   /* reverse:  reverse string s in place */

   #include <string.h>

   void reverse(char str[])
   {
	  int c, i, j;

	  for (i = 0, j = strlen(str)-1; i < j; i++, j--)
	  {
		  c = str[i];
		  str[i] = str[j];
		  str[j] = c;
	  }
   }


// Program
#include <stdio.h>
#include <conio.h>

main()
{
	char name[] = "Manbhavan";

	reverse(name);
	puts(name);
	getch();
}

// Output 
	navahbnaM

जिस तरह से किसी Character Array में String Format में Stored Numerical मान को Calculation में उपयोग में लेने के लिए उसे Integer, Float जैसे किसी Format में बदलने की जरूरत पडती है, उसी तरह से कई बार हमें किसी Basic Data Type के Variable में Stored मान को Character Array में Store करने की भी जरूरत पडती है। इस प्रकार की जरूरत को पूरा करने के लिए हम पिछले प्रकार के atoi() Function का Reverse Function itoa() Create कर सकते हैं।

/*itoa:  convert Numerical Integer to Characters Array Integer*/

   void itoa(int n, char str[])
   {
	   int i = 0, sign;
 
	   if ((sign = n) < 0)  /* record sign */
		   n = -n;          /* make n positive */

		 do 		/* generate digits in reverse order */
		 {      
		   str[i++] = n % 10 + '0';  	/* get next digit */
	   }while ((n /= 10) > 0);    		/* delete it */

	   if (sign < 0)
		   str[i++] = '-';

	   str[i] = '\0';
	   reverse(str);
   }

ये Function दो Arguments लेता है। पहला Argument वह Integer मान होता है, जिसे String str में Store करना है और दूसरा Argument एक Character Array होता है, जिसमें पहले Argument के Numerical Integer मान को Character Array में String के रूप में Store करना होता है।

जब ये Function Call किया जाता है, तब सबसे पहले ये Check किया जाता है कि ये संख्‍या Positive है या नहीं। Sign Check करने के लिए एक if Statement में ये Check करवाया जाता है कि संख्‍या 0 से छोटी होती है या नहीं। यदि संख्‍या 0 से छोटी हो तो sign नाम के Variable में Sign को Store किया जाता है और Negative Sign वाली संख्‍या को निम्न Statement द्वारा Positive संख्‍या में Convert कर लिया जाता है:

   if ((sign = n) < 0)  /* record sign */
       n = -n;          /* make n positive */

Character Array में Store किए जाने वाले मान को Positive मान में Convert करने के बाद अब उस मान से एक-एक Digit को Character में Convert करने के लिए निम्नानुसार एक do … while Loop का प्रयोग किया जाता है:

    do                     /* generate digits in reverse order */
    {     
         str[i++] = n % 10 + '0';       /* get next digit */
    }while ((n /= 10) > 0);             /* delete it */

इस Loop में सबसे पहले 10 का भाग देकर शेषफल प्राप्त किया जाता है। ये शेषफल Store किए जाने वाले Integer का अन्तिम Digit होता है। चूंकि अभी भी ये मान एक Digit है, जबकि Character Array में Store करने से पहले इसे Character में Convert करना जरूरी है, इसलिए इसमें मान Zero की ASCII Value को जोड कर इस मान को Digit से Character में Convert किया गया है।

Digit से Character में Convert होने के बाद इस Character को Character Array str के Index Number 0 पर Store कर दिया जाता है और उसके बाद i के मान को Increment किया जाता है।

इसके बाद while Condition Brace में Store किए जाने वाले Integer मान में 10 का भाग देकर Integer मान की अन्तिम Digit को Delete किया जाता है। अन्तिम Digit को Delete करने के बाद Check किया जाता है कि क्या Integer मान अभी भी 0 से बडा है या नहीं।

यदि Integer का मान 0 से बडा है, तो इसका मतलब ये होता है कि Integer में अभी भी कोई Digit है जिसे Character में Convert करना बाकी है, इसलिए ये Loop फिर से Iterate होता है और फिर से इस Integer संख्‍या में 10 का भाग देकर Reminder के रूप में Integer के अन्तिम Digit को प्राप्त किया जाता है। ये प्रक्रिया तब तक चलती रहती है, जब तक कि Integer की सभी Digits Character Array में Store नहीं हो जाती हैं।

एक बार Character Array str में Integer मान के Store हो जाने के बाद अब उस Integer के Sign को Character Array में Store करने की जरूरत पडती है। इसके लिए निम्न Statements का प्रयोग किया जाता है:

   if (sign < 0)
       str[i++] = '-';

   str[i] = '\0';

ये Statement Check करता है कि sign का मान 0 से छोटा है या नहीं। यदि जो Integer हमने Character Array str में Store किया है, वह Negative यानी 0 से छोटा होता है, तो इस Statement की if Condition True हो जाती है और Character Array में Index Number i की Position पर Minus के Sign को Store कर दिया जाता है। अन्त में String के अन्त को Specify करने के लिए Character Array में अन्तिम Character के रूप में NULL को Store किया जाता है, जो String के अन्त को Specify करता है।

चूंकि हमने Character Array में जिस Integer को Store किया है, वह Integer Reverse Order में Store हुआ है। इसलिए Reverse Order में Stored Integer मान को Forward Order में Convert करने के लिए हमें reverse() नाम के Function को Use करना होता है। ये Function हमने इस Function से पहले Develop किया है। ये Function Character Array में Stored Integer के String Representation को Reverse Order में Convert कर देता है। (Character Manipulation Functions – Wiki)

जिस तरह से हमने एक Integer प्रकार के मान को एक Character Array में String के रूप में Store किया है, ठीक इसी तरह से हम अन्‍य प्रकार के मानों को भी एक String Representation के रूप में किसी Character Array में Store कर सकते हैं। इस Function को Practically Use करने के लिए हम निम्नानुसार एक main() Function Develop कर सकते हैं:

// Program
#include <stdio.h>
#include <conio.h>

main()
{
  char str[15];
   int Integer = 30555;
   itoa(Integer, str);
   reverse(str);
   puts(str);
   getch();
}
Array of Pointers to String
Preprocessor Directives in C

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।