 اسلام علیکم پہلے بھی ت!. ملٹی دیمانشنل ، پوینٹر ، اور کچھ کچھ جو بہت آپ افراد ہے اس طرف ہم چھوڑ سا سٹرنگ ہندلنگ کی طرف چلتے ہیں سٹرنگs ہم بار بار لاتے رہے ہیں لیکچز کے اندر بہت سارے ان کی منیپلیشن بھی کی ہے لیکن اسوڈ ہے جو اسی دیتے ہیں اگر سٹرنگs اتنی ہی بہت ایک حیرت ہیں تو کیا ان کے لیے ہمارے پاس کوئی built-in functions ہیں جو ان کے ساتھ کچھ کام کر سکیں؟ ابویسلی ڈاانسر is yes and that is the topic of today's lecture that we will be talking about many many string handling comparison all kinds of string manipulation functions تو ہنڈسٹینٹ کیجی اتنے سارے string functions کیوں وجود ہیں سے ہی c اور c++ میں تو تھوڑی سی اس کی ہیسٹری کو کوڈ کر لینا مناسب رہے گا جب یہ c language اور espeشalی the UNIX operating system ڈیویلپ ہو رہے تھے بیل لیبز کی بات ہے تو وہاں پہ ایک problem جو تھا جس کے لیے یہ کام ہو رہا تھا وہ تھا کہ جی فائلیں جو ہیں وہ article scientists جو تھے وہ publish کرنا چاہتے تھے اور publish کرنے کے لیے ان کو text editing کی ضرورت تھی. So they wanted some easy mechanism جس سے وہ text کو edit کر کے format کر کے print کر سکیں for publication. یاد رہے یہ وہ زمانہ تھا جب ابھی pcs نہیں آئے تھے word processors نہیں بنے تھے I mean جو ہم بالکل بغیر سوچے بے جو کام کر لیتے ہیں نا character کو bold کر لیا underline کر لیا بڑے نیٹلی paragraph format کر لیا یہ چیزیں وہ زمانے میں نہیں ہوتی تھی. So وہاں پہ بڑے simple computer تھے بڑے simple programs تھے اور وہ لمبے چڑے وہی جو punch cards چلتے تھے اور magnetic tapes چلتی تھی اس طرح کے computer تھے تو جب ایک mundane activity which means ایک article لکھنا ہے اور journal میں publish کرنے اس کی باری آئی تو وہ type writer پہ ہی چلتا تھا ہاتھ سے لکھا سیکری کو دے دیا یا خود بیٹھ کے type writer پہ اس کو ڈائپ کیا غلطی ہو گئی تو یا white out لگایا یا پھاڑ کے پھیک دی اور nice ڈائپنگ شروع کر دی so these people they decided to develop something that would make life easier for them and in this process of developing something for text processing all of these the language was born the operating system was born and that is what we are studying today اس امانے میں اس کو ہم world processing تو نہیں کہتے تھے ہم text processing کہتے تھے کیونکہ یہ what you see is what you get والا زمانہ بھی نہیں آیا تھا so in line commands لکھی جاتی تھیں they were typed as part of the text اور پھر اس کو ہم process کرتے تھے on output بعد میں عاستہ عاستہ evolve کرتے ہوئے کچھ process ایسے بنے کے جی پہلے آپ commands ایسے bold کرنا ہے bold کی command ڈیچ میں type کر دی پھر اس کو preview کر لیا but normally preview کی باری اسی وقت آتی تھی جب کاغرس پرنٹ out لیا جا رہا تھا anyway that's enough of history let's go on and see what type of string manipulation functions does see or see plus plus providers see plus plus میں تو بہت ساری اور چیزیں ہیں see کے اندر for the moment we will look at the see string manipulation functions اس کے اندر let's start off with the building block which is the character character کے ساتھ کیا کیا کیا جا سکتا ہے string کے ساتھ کیا کیا جا سکتا ہے and so on so forth پہلے تھوڑی سی characters کی بات ہو چلیں characters as you know are represented inside the computer in terms of numbers obviously کوئی نا کوئی تو method to the madness ہوگا کوئی code ہوگا جس کے ذریعے سے یہ characters represent ہوتے ہیں عام طور پہ ہمارے جو کمپیوٹرس ہیں آج کل وہ اس کی کوڈ استعمال کرتے ہیں اس کی آئی آئی آپ نے شہد انٹردیکشنٹو کمپیوٹنگ میں بھی پڑا ہو لیکن یہ کوڈ ہے کیا نواملی آپ کو جو پرگیمنگ کی کتابیں اس میں پچھلے کور یا اگلے کور کے اندر ایک اس کی تیبل دیا ہوتا ہے میں کہوں گا کہ جی وہ آپ ضرور دھونے اور اس کو ایک دفعہ دیکھ لیں کہ ہر چیز جو کیبوٹ پی دی ہوئی ہے یا وہ ای ہے بی ہے سی ہے 012 comma full stop question mark everything on the keyboard has some numeric representation یہ نمیریک representation جو ہے یہ کمپیوٹر کی میمری میں manipulate ہوتی ہے output پہ ہم اس کو as characters استعمال کرتے ہیں اگر آپ اس کی تیبل کو دیکھنا چاہیں تو why don't you write a little program and see the as کی value for yourself how would you do that دیکھیں ہمارے پاس ایک تو دیتا ٹائیف ہے چار چار کے اندر ہم ایک character سٹور کر سکتے ہیں اور بار بار بات ہوا یہ character وہ ہے جو کیبوٹ سے ہم انپوٹ کرتے ہیں white space بھی character ہے new line بھی character ہے comma full stop abc 012 بھی characters ہیں تیکنہ وہ as numbers اور چیز ہیں بہت جب ہم کیبوٹ سے ٹائیپ کرتے ہیں they are characters اب دوسی طرف ہمارے پاس ہے int ڈ میں whole numbers ڈور ہوتے ہیں integers we have also mentioned that since these characters are stored inside memory as numbers it is logical to think کیجی ان کو ہم as integers بھی manipulate کر سکتے ہیں in fact that is very correct اور اگر آپ ایک simple سا program لکھیں کیجھنا بھی ایک loop چلائیں جس میں کچھ integers اور ان کی character representation کو print out کریں تو آپ کو correspondence نظر آ جائے گی question یہ ہے کہ یہ loop کتی لمبی چلانی ہے well let's look at it کتنے ہیں a to z تا کتنے characters ہیں چھبیس اس کے بعد ان کو capital کرنے تو capital a capital b capital c چھبیس اور آگئے میں جس طرف جا رہا ہوں وہ question یہ ہے کہ جی کتنی bits چاہیں ان characters کو اس طرف کرنے کے لیے well let's take a look well you know کیجی اگر ہمارے پاس n bits ہوں تو ان کی کتی مختلف values ہو سکتی ہیں 2 to the power n so اگر آپ کے پاس 4 bits ہیں تو وہ 2 to the power 4 different values ڈور کر سکتی ہیں 2 to the power 4 is 16 اس سے تو بات بنیگی نہیں آپ کے پاس simple a to z تاک چھبیس characters ہیں if we take 5 bits 2 to the power 5 32 تو پھر چھبیس کے لور کیس کے ساتھ چھبیس اپر کیس characters ملائے تو وہ بھی کم ہو جائے گا anyway I won't make a long story out of it the normal representation of a character inside the computer's memory is one byte 8 bits 8 bits means 256 different combinations of numbers 256 different numbers can be stored in their combination of bits question یہ ہے کہ جی وہ جو کوئی ایک خاص نمبر ہے جو ایک byte میں ڈور کیا ہے اس کی character representation کیا ہے ندبر جگر ہم سکرین پر اس کو دکھانا چاہیں تو وہ کس چکل میں نظر آئے گا یا ہم کی بور پر کوئی کی دبائیں تو وہ اندر کس نمبر کے طور پر ڈور ہو گی so back to our little experiment why don't you simply write a little program which takes an integer variable let's call it I takes a character variable let's call it C so you run a loop on I from 0 to less than 256 so it'll be 0 to 255 I کے اوپر loop چلے گی تو I کی value تو بدلتی رہی گی loop کی اندر اس کو character کے طور پر پرنٹ کرنے کے لیے you must assign it to the character C so inside the loop آپ کریں یہ کہ پہلے کر دیں C is equal to I تو اب آپ کے پاس I میں integer value ہے اور C میں اس کی character representation آ جائے گی اس کے بعد C out کے ساتھ آپ I کو بھی پرنٹ کریں بیچ میں tab space دے دیں اور پھر C کو بھی پرنٹ کر لیں اور پھر new line ڈال دیں ڈل کر لیں یا backslash and character استعمال کر لیں صرف یہ دو لائنوں کی loop لگا کے اس کو چلائیں تو سکرین پر دیکھیں کیا رزالت آتا ہے کچھ interesting چیزیں آپ کو نظر آئیں گی آپ کو نظر آئے گا کہ جی پہلے کچھ smiling faces کچھ عجیب سے کاریکٹر سیں اس کے بعد ایک جگہ پہ کوئی کاریکٹر نہیں ہے وہ کاریکٹر ہے اس کی value 32 جو ہے وہ space کاریکٹر ہے جو space بار آپ کے پاس بنا میں کیبوٹ پر لنبا اس کو دبائیں تو space چھوڑتے ہیں دو لفت درمیان وہ space کاریکٹر ہے it also prints ہاں اس کرین پر وہ نظر کچھ نہیں آتا but تھوڑی سی جگہ تو چھوٹتی ہے سو وہ بھی آپ کو نظر آئے گا اس کے بعد آپ کو punctuation marks بھی آئیں گے alphabet بھی نظر آئے گی اور پھر alphabet upper case lower case دونوں میں نظر آئے گی numbers نظر آئیں گے اس کے پات بہت بہت سارے اور کاریکٹر ہیں جن میں line a vertical double line اس کسم کے کاریکٹر سیں جو آپ میں سے زرا سے imaginative ہیں وہ ان کاریکٹر کو دیکھیں گے جو شکلیں بنی ہی ہیں جو زیادہ بڑے نمبر کے ساتھ associated ہیں and you will be able to see that you can draw all kinds of boxes using these numbers and it might be a good experiment to try to draw a box on the screen single line box double line box خانو والا box اس طرح کر کے صرف اور صرف ان کاریکٹرز کے ساتھ پرنٹ کر سکتے ہیں جو چیزیں نوٹ کرنے والی ہیں اور وہ اس واصل کے آگے آپ کے ایک assignment بھی آئے گی جس میں شاید آپ کو یہ فائدہ دے سکیں وہ ہے کہ جی چھوٹے a سے لے کے چھوٹے زیاد تک continuous numbers ہیں یعنی b کی جو ہے وہ ایکی value plus one کے برابر ہے and so on so every increasing alphabet is actually one more than the previous characters as کی value same applies to the upper case characters کنسا بڑا ہے کنسا چھوٹا ہے آپ پرنٹ کرکے دیکھیں کہ جی capital a پہلے آتا ہے کہ small a پہلے آتا ہے تکہ discover that on your own but anyway that was enough about as کی character said play with it print out things and try to draw things on the screen just using see out and the new line character کچھ characters draw کریں پھر نئی لین پے draw کریں ایسی طرح and see if you can make a box out of these اور باقی تو آپ کے printable characters ہیں جن کے ساتھ آپ کام کرتے رہے ہیں یہ تو ہوگئے characters اور character set اب question یہ ہے کہ جی can we do we have any functions جن کے ساتھ ہم ان کو manipulate کر سکتے ہیں یا test کر سکتے ہیں the answer is yes we have character functions as well یہ جو ہیں یہ آپ کو ملیں گے ایک library میں جس کے لیے as usual ہمیں ایک header file include کرنی پڑتی ہے یہ header file جو ہے یہ ہے see type dot h so اب جو آپ character manipulation والے programs لکھیں گے ان میں سب سے اوپر آپ شارپ include اور وہی angle brackets کے اندر see type dot h بھی لکھ لیں اگر یہ نہیں لکھیں گے تو you know by now that you if you try to reference a function inside your program اور وہ function کو prototype declared نہ ہو تو آپ کو compiler ہی error message دے دیتا ہے کہتا ہے کہ جی مجھے یہ function نہیں ملایا implicit declaration of نیچے لکھا با آ جاتا ہے نیچوں جو window ہے آپ کے dev c++ کے environment کے اندر ایک چیز آپ نے شہد اور notice کیوں میں تھوڑسہ digress کر رہا ہوں کہ اگر آپ کے پاس کوئی error message نیچے آتا ہے نیچے والے حصے میں تو اس کو اگر آپ دبل کلک کریں گے تو وہ دکھا دے گا کہ جی کس لین پے error تھا اوپر جہاں آپ کا code ہے وہ highlight ہو جائے گا so you can use it very easily to jump and find out where the error is of course this is not a full proof technique because کئی دفعہ یہ ہوتا ہے کہ آپ اوپر کہیں semi colon miss کر دیتے ہیں تو وہ error نیچے والی لین پے دکھا رہا ہوتا ہے لیکن semi colon اوپر miss کیا ہوتا ہے so be aware of that anyway see type ڈوٹ ایج کے اندر کیا function موجود ہیں یہ لیس جرہ آپ دیکھیں دیکھیں اس کے اندر ہمارے پاس is digit ہے is alpha ہے is l num is alpha numeric and so on let me take them one by one and talk about them is digit takes a simple character as its argument and returns true or false and it's like a question that is being asked is this character a digit یہ کسچن پوچھا جا رہا ہے or obviously its answer can only be true or false as I mentioned earlier character میں 012 بھی ہو سکتا ہے as a character now when we say 0 as a character it means single quotation marks کے اندر 0 لکھا ہو یا ایک چاہر طاپ دیتا طاپ کے ویریبرل کے اندر کوئی character store کیا ہو جو ویسے numeric character ہو تو یہ function جو ہے is digit یہ دیترمین کرتا ہے کہ جی آپ نے اس کو numeric character دیا ہے in which case it will return true اور اگر وہ کوئی اور character ہو یعنی abc ہو coma ہو full stop ہو تو یہ false return کرے گا so it's a useful function for testing input is digit اسی طریقے سے alpha بیٹ کو اگر چیک کرنا ہو تو is alpha is alpha کے اندر وہ digits کو false return کرے گا لیکن اگر abc ہو lower case یا upper case تو وہ true return کرے گا اسی طرح ہمار پس is alpha numeric کا function ہے alpha numeric means کے جی 012 اور abc ان میں سے کوئی بھی چیز ہو تو یہ true return کرے گا اور اگر نہیں تو false return کرے گا اور کافی سارے اور ہیں آپ ٹیبل کے اندر دیکھ لیں اور پھر ان کے ساتھ experiment be کریں کچھ اور کام کے functions ہیں وہ ہیں conversion functions ایک تو آپ کے پاس function ہے is lower now is lower جو ہے اس کو آپ character پاس کرتے ہیں وہ بتاہتا ہے کہ یہ lower case ہے چھوٹا ای چھوٹا بی یا چھوٹا c type phone character تو وہ true return کرتا ہے otherwise وہ false return کرتا ہے so اگر is lower کو آپ full stop پاس کر دیتے ہیں تو وہ false return کرے گا اگر اسی طرح کے ساتھ اسی طرح کا ایک function ہے is upper so یہ بھی ٹیست کر سکتا ہے کہ جی upper case character انٹر کیا ہے یا lower case character انٹر کیا ہے so these are the testing functions انی کے ساتھ کے ہمارے useful functions ہیں conversion functions وہ ہے to lower اب مزے کی بات دیکھیں جو بھی لنگوڈ لکھنے والے تھے جنو نے پہلی دفاع یہ functions لکھے تھے they try to use function names that are self-explanatory so for example to lower means give me a character and I will convert it to lower case so it's useful to know کہ جی function names also are self-explanatory so to lower جو ہے اس کو اگر آپ lower case character دیں گے یا کوئی non-alphanumeric character دیں گے کچھ نہیں کرے گا اگر آپ اس کو upper case character دیں گے تو وہ اس کا lower case equivalent واپس کرے گا obviously 012 جو ہے ان کا کوئی lower case نہیں ہے وہ 012 ہی رہتے ہیں full stock comma بگرہا جو ہے وہ full stock commas رہتے ہیں لیکن upper case a سے لیکے z تک کوئی بھی character to lower کو دیں گے تو وہ اس کا lower case equivalent return کرے گا اسی کے ساتھ جو ہے وہ to upper function ہے logically same family so if you use a to upper function it convert from lower case to upper case and a lot of other functions چلیں ان کو try کرنے کی لیے ایک چھوٹا سا program لکھتے ہیں جس کے اندر ہم اس کو characters کو گنتی کر کے بتاتے ہیں کہ یہ lower case کتنے تھے upper case کتنے تھے digits کتنے تھے punctuation کتنی تھی and so on ہم نے ایک example آپ کو hand out میں بھی دیا ہوا ہے screen پہ بھی اس کے تکڑے آپ کو دیکھاتے ہیں اس میں جو مزے کی چیز ہے وہ تھوڑے سی beginning میں آتی ہے جس کا to lower or to upper وگیرا کے ساتھ کوئی تعلق نہیں ہے لیکن it's a useful tool to know ابھی تک ہم input output جو ہے وہ see in کے ساتھ کر دے رہے ہیں see in ابھی تاک اگر آپ نے کافی سارے programs لکھیں ہیں اور experiment کیا ہے you would have discovered کہ دی وہ ایک word یا ایک character جو ہے وہ assign کر دیتا ہے کسی variable کو اور پھر next کو and so on it requires an enter at the end جب ہم character manipulation کر رہے ہیں تو maybe we need to use something else the something else in this case is the get 4 function یہ see میں standard library میں ہمیشہ سے موجود ہوا موجود ہے g e t c h a r اور آگے پر انتسیز get 4 جو ہے یہ کی بورد یا input buffer جو ہے تو کی بورد to your program سمجھ لیں ایک رستہ بنا ہوا ہے اس رستے پے جتنے کاریکٹرز ہیں اس میں سے get 4 ایک ایک character لیکے آپ کے program کو hand over کرتا ہے see in جو ہے وہ کبھی بھی new line کو نہیں پکڑتا وہ دیکھتے آپ نے کیا تیپ کیا up to the new line یا enter character اور اس سے پہلے پہلے والی چیزوں کو وہ variables میں store کرنے کی کوشش کرتا ہے on the other hand get 4 جو ہے وہ new line کو بھی پکڑ لیتا ہے so it is useful when you're actually doing character manipulation not to miss out the new line or these special characters so یہ جو آپ کو program snippet دکھائے جا رہی ہے اس کے اندر اگر آپ سب سے پہلے دیکھیں تو ہم نے ایک prompt دے دی as usual we are being polite کہ جی پیس انٹر a character string and then press enter جب آپ انٹر کرتے ہیں تو آگے والی loop شروع ہو جاتی ہے کہتی ہے کہ جی while c equal to get 4 پر انتسیز کے اندر is not equal to new line so ہم نے automatically کہ دیا کہ جی ہمیں delimiter مل گیا ہے اور while loop چلا دو جو بھی آپ نے تیپ کیا تھا وہ ایک ایک character کر کے program میں لیتے آپ اور پھر اس کے اوپر جو بھی ہم نے گنتی کرنی ہے کہ جی کتنے اپ پر کس ہیں لوہر کس ہیں وہ loop کی اندر چلتے ہیں it's a useful construct and you should get used to it دیکھیں اس کے اندر دو تین interesting چیزیں ہو رہی ہیں while پھر اس کے اپنے parentheses آئے پھر اس کے اندر ہم نے لکھا c equal to get 4 اور پھر ساری چیز کو ہم نے parentheses میں enclose کر دیا اور پھر اس پوری assignment کو because c equal to get 4 is an assignment اس کو ہم کمپیر کر رہے ہیں new line character کے ساتھ is that valid I think I may have mentioned earlier but if I'm not then let's complete that every c statement returns a value جو مرزی c کی سٹیٹمنٹ ہو اس کی اپنی بھی ایک value ہوتی ہے جب ہم assignment سٹیٹمنٹ سستمال کر رہے ہوتے ہیں جیسے یہاں پھر c equal to get 4 ہے تو نمالی جو left-hand side پی چیز ہے اس کو جو value assign ہی ہے وہی پوری سٹیٹمنٹ کی value بن جاتی ہے سو اس پاستے ہم یہاں پہ جب لکھتے ہیں while اور پھر جو test چیز ہم کر رہے ہیں وہ ہے c equal to get 4 that is an assignment statement it returns the value of the character that was assigned to the variable c when that value is returned اس value کو ہم کمپیر کر رہے ہیں new line character کے ساتھ and then we will go into the loop اور پھر ہم c کو پکڑ کے سارے test لگا دیتے ہیں کہ جی اگر is upper ہے تو یہ کر دو is lower ہے تو یہ کر دو etc. so we can do account and the nice thing is that simply by running through this loop that entire string that you typed at the keyboard and then you pressed enter وہ پوری string character by character پروسیس ہو جاتی ہے ہم آپ کے لیے ایک انٹرسٹنگ سی آسائمنٹ بنا رہے ہیں وہ آپ کو میں بعد میں بتا ہوں گا may be next لیکچر کے بعد جہاں پہ آپ کو ایک کافی کیریکٹر ہینڈلنگ وگرہ کرنی پڑے گی چیلیں تھوڑا آگے چلتے ہیں کیریکٹر ہینڈلنگ آپ کریں گے experiment بھی کریں گے اس کے ساتھ next is what do we do about conversion from let's say the character 0 to the number 0 تیک ہے اب دیکھیں اگر کیریکٹر 0 جو ہے اگر آپ نے وہ اس کی والا program اپنا لکھلی اور چلالی ہے you'll find کی جی اس کی تو کوئی نون 0 value ہے تک ہے so the character 0 has a non 0 as کی representation so you can't say it is the number 0 so how do we assign it to an integer variable assuming کہ آپ نے اگر 0 انٹر کیا ہے تو وہ 0 کسی integer variable میں store ہو ایک طریقہ تو وہ ہے جو ہم نے پہلے استعمال کرتے آہیں کہ جی see in greater than greater than x where x is an integer variable پھر تو وہ وہاں پہ چلا جاتا ہے لیکن اگر آپ کے پاس variable جو ہے وہ کیریکٹر ہو جس کے اندر آپ نے کیبوٹ سے انپورٹ لی ہے لیکن انپورٹ جو لی ہے وہ نیومیریک ہو so you want to convert this numeric character representation into actual numeric variables اس کے لیے we have a few functions a to f as کی to float یہ ایک string لیتا ہے اور return نمبر کرتا ہے a to i as کی to integer again it takes a string and it returns an integer a to l it takes a string an as کی string and returns a long integer so there are conversion functions کہاں استعمال ہوتے ہیں لیکن ایک طریقہ تو آپ کہہ سکتے ہیں کہ جی it will be quite artificial کہ جی ہم نے see in کے ساتھ جو بھی چیزیں get کی ہیں وہ character strings کے اندر store کی ہیں اور بعد میں ہمیں conversion کی ضرورت پڑ گی ہے کہ جی جو نمبر دالا تھا کہ جی age enter کرو آپ نے 45 دبایا کہ جی کسی کی age you have a 45 ہے what you type at the keyboard went into let's say a string اگر string کا نام ہے str اس میں سے نمبر نکالنے کے لیے we would say something like ڈی جی end age age equals a to i parentheses کے اندر str very nice very simple string is passed to the as کی to integer function and it returns an integer value ہاں اگر str کے اندر کوئی integer value نہ ہو تو obviously garbage return ہوگا so you should check it out and find out کی دی zero return ہوتا ہے کیا return ہوتا ہے تک انہاں so that you can do error handling in your programs you need to know how to handle the exceptions same applies for a to f ہم چاہ رہے ہیں کہ جی 12.89 انٹر کیا جائے so 12.89 تو real number ہے یہ float variable کے اندر سٹور ہو سکتا ہے ڈبل کے اندر سٹور ہو سکتا ہے تو a to f استعمال ہوگا will say a double variable equals a to f string string convert ہوکے ڈبل کو assign ہو جائے گی and so on in functions کا real استعمال کا ہاں ہوتا ہے آپ کو شہد یاد ہو انہیں بتایا تھا کہ جو ہم main function لکھتے ہو اس کے آگے parentheses ہیں ان parentheses کے اندر بھی ہم کچھ لکھ سکتے ہیں اور کیا لکھتے تھے ہم لکھتے تھے انٹر گی اور پھر کومہ چار سٹار سٹار آگی what did that mean آگی was the count of the number of arguments passed to the program including the name of the program itself and are we was a vector of strings any an array of strings اب that means کہ یہ ہم استعمال کرتے ہیں جب program کو command line arguments دیتے ہیں پھر example میں اس کو کہ سکتا ہوں کہ جی program کا نام پھر کچھ character string دوں پھر کوئی number دوں پھر character string دوں پھر کوئی number دوں if that is what I want to process problem is یہ سارے arguments will always be character strings regardless of کہ جی میں نے وہاں پہ 45 لکھا ہے یہ 12.89 لکھا ہے program کے اندر جب یہ پہنچیں گے آپ تو آپ اس کو آگی string جو ویکٹر ہے اس کے اندر ایک string لیں گے اس string کے اندر 45 لکھا ہوگا یا string کے اندر 12.89 لکھا ہوگا وہاں پہ آپ کو ان function کی ضرورت پڑھ جائے گی a to f a to i a to l کی جو اس کی سے لیکے نیمریک representation کے اندر convert کرتے ہیں so they are very very useful of course the more imaginative one amongst you you would have by now thought of کہ جی a to f لکھنا کیسے یہ a to i کیسے لکھنا ہے i think اگر وہ اس کی طابل والے program کو سمنے رکھیں تو you should be able to come up with an algorithm where by which you can convert a character string containing digits into its numeric representation give it a try maybe you can let's go on now to some string functions strings کے اندر یاد ہوگا let's say again ایک گیم آپ سے لکھوا ہی تھی وہ تھی guess the number game guess the number game میں تو اسان کام تھا کہ جی آپ نے کمپیوٹر میں کمپیوٹر چھوپا دی اور پھر user کو کہا کہ جی guess کرو اور ہم نے integer get کر کے اس کو compared کر لیا can't we do that with strings ہم کہیں کہ جی میں نے ایک نام بیچ میں دال دیا ہے نام guess کرو اب اس کو algorithmکلی دیکھا جائے تو کیسے کیا جائے گا اب اگر دو strings کو compared کرنا ہے تو what would we do we take the first character and compare it to the first character in the other string اگر وہ برابر ہیں پھر second character اگر وہ برابر ہے پھر third character and so on and then also make sure کہ the strings are the same length کیونکہ اگر ایک string لمبی ہے اور اس سے پہلے سارا exact match ہو چکا ہے تو لمبائی کی وجہ سے ہم کہیں گے جی match نہیں ہوا کیونکہ one string has more character than the other so of course we can do it by now with simple character comparisons but again why do it if there are functions provided for in your library so for example string copy ایک string سے دوسی string کے اندر copy کرنا string compare دو strings کو اپس میں compare کرنا and so on یہ آپ کے پاس ایک table ہم دکھاتے ہیں جس کے اندر string functions یہاں وہ list ہیں یہی list آپ کی بوک کے اندر بھی موجود ہے and you should go over them one by one and try to understand them دیکھیں یہاں پے I would like to reiterate a few things پہلی چیز اس کو یاد رکھنے کی کوئی ضرورت نہیں ہے تیک ہے you should be able to look these functions آپ ایسا لنکہ آپ کے دماغ میں یہ چیز آ جائے کہ جی مجھے ایک function چاہی ہے جو کہ دو strings کو اپس میں compare کرتا ہوں normally every languages help system should be able to provide you with help how to compare strings and it should name the function that is available in a standard library on the other hand if the compiler doesn't pick up the book look in the index see how you can compare strings آگے کوئی نہ کوئی لکھا ہوگا especially if you have a muted index وہ لکھا ہوگا کہ جی یہ والا function look up کر لیں function look up جو ہے اس کو پرنا وہ بھی ایک art ہے کہ جی function کی declaration دیوٹی ہے کتاب کے اندر کہ جی یہ اس کو argument pass ہوں گے یہ چیز یہ return کرے گا پھر ایک چھوٹی سی description ہوتی ہے بچاہتے ہیں جی پہلہ argument اس چیز کے بہر اپرزینٹ کرتا ہے دوسرہ اس کو رپرزینٹ کرتا ہے return value یہ رپرزینٹ کرتی ہے you should read those and almost make it a habit کے جب آپ اپنے functions لکھنے جائیں تو ان کا header جو ہے as comments you can use the same type of syntax کہ جی function کا name بتا ہے اور function بتا دیا کہ جی یہ کرتا ہے پھر اس کو بتا ہے کہ جی یہ اتنے arguments لیتا ہے پہلے argument یہ دوسرہ یہ اور ان کو ساتھ ساتھ explain کرتے جائیں بہت useful habit ہے اگر آپ یہ comments آپ نے in house functions جو آپ لکھیں گے ان کے اندر بھی include کرتے جائیں nonetheless back to my statement کہ جی آپ کو یاد کرنی کی ضرورت نہیں ہے میں اس وقت کہا رہوں کہ جی I am strictly against رٹہ تھی کہ میں نہیں چاہتا کہ جی کوئی ایک گروں جو ہے نا وہ اس نے پورے see library کے functions رٹے ہوں اور وہ کہ جی مجھے پتا ہے کیسے آتا ہے now obviously remembering the names of these functions is useful because it saves you a little bit of programming time you should be able to know yes to copy a string from one to the other I use strcpy string copy function اور اگر میں نے دو strings کو کمپیر کرنا ہے تو میں strcmp کر سکتا ہوں ہاں کچھ اس کے variables یہ variations بھی ہیں کوئی اور طریقہ بھی ہے کمپیر کرنے کا لیکن کیوں میں کہہ رہا ہوں کہ جی ان کو ساری library کو یاد کرنی کی ضرورت نہیں پہلی چیز you can look it up دوسری چیز hopefully you can write these functions by yourself so here's a challenge look at the function definition and try to duplicate it آپ کو definition or declaration مل گئی ہے نام اس کا بدل لیں تاکہ وہ library function کے ساتھ کلاش نہ کرے لیکن آپ string copy function اپنا لکھیں string compare function اپنا لکھیں try it is good programming exercise and it also give you a feel for how to make things more and more efficient ایک اور چیز میں بیات کرتا چاہلوں پہلے بھی میں نے کہا تھا in your own programs please do not sacrifice clarity for efficiency not at this stage جب آپ گروں بن جائیں گے نا جب آپ اپنی language ڈی لکھ رہے ہوں گے جا اپنی language xx اجاد کر رہے ہوں گے اس وقت ضرور کیجے گا ابھی کے لیے your programs must be absolutely clear they intend every line should be readable and understandable so you may be sacrificing some efficiency for clarity but for the moment clarity wins efficiency wins when you have a function آپ لکھتے ہیں کوئی function اور آپ کو پتا ہے کہ جی آپ کے program کے اندر اس نے 10 کروڑ دفعہ کال ہونا ہے now اگر ایک function نے 10 کروڑ دفعہ کال ہونا ہے تو ہر کال پہ اگر آپ کا point zero zero one seconds کم time وہ لیتا ہے in other words it's slightly more efficient than it adds up the 10 کروڑ calls to that function would have a significant saving in computer run time نندلیس اگر function نے ایک دفعہ کال ہونا ہے تو کسی کو پتا بھی نہیں چلے گا کنی ایک millisecond وہ جلدی چل گیا ہے یہ ایک millisecond دیر سے چلا ہے so don't sacrifice clarity for efficiency not at this stage having said that now what you should do is look up this table of string manipulation functions and ایک دو تین چار کم اس کم آپ اپنے طور پے لکھنے کی کوشش کریں go to the discussion board and try to پوٹین you know my attempt or my string copy function of course آپ کو تست کرنا چاہیے and make sure that it works before publishing your work okay there was a very interesting میں ویسے کومنت کرتا چاہروں جنرل سٹائل کیا پر ہم بات تو کرتے آئے some gentlemen put a piece of code on the discussion board and it was a code related to taking the sum of even an odd integers انہوں نے جو کود لکھا اس میں even integers کا سم جو ہے وہ جا رہا تھا in a variable called some چلیں یہاں تک تو مان لیتے ہیں اس کے بعد انہوں نے ایک اور ویریبردیکلیر کیا تھا اس کا نام تھا some underscore even اور کود کو دیکھا تو پتہ چلا کہ جی odd variables کا سم جو ہے وہ اس ویریبل میں جا رہا ہے جس کا نام ہے some underscore even now from the programs logic perspective there was nothing wrong with the program it ran beautifully it ran well some of even numbers بھی وہ نکالتا ہے some of odd numbers بھی نکالتا ہے اور screen output بھی بلکل ٹھیک ہے لیکن اگر اس کے source code کو دیکھیں تو it is very very confusing it says some even کے اندر کوئی چیز جمع ہو رہی ہے پر یہ تو odd numbers جا رہے ہیں what is what is happening here اگر ویسے دیکھیں تو آپ اسیم کریں گے some even کے اندر even numbers کا سم پڑھا ہو ہے so you know just general guidelines کہ اگر آپ ویریبل کو نام دے رہے ہیں تو نام بھی ایسا دیں جوکہ پرنے سے ہی سمجھ آ جائے کہ یہ کیا چیز ہے تو instead of just calling some جب اس میں even numbers کا سم رکھنا ہے تو اس ویریبل کا نام رکھیں some underscore even یا some even اور جو odd integers ہیں ان کا some some odd رکھنے so that the names are self-explanatory so in this case when you're writing your own functions you're writing a string copy function call it my string copy اندر جو ویریبل نیمیں کرنی ہے وہ بھی زرا سی explicit ہو نظر آئے شہد کچھ extra typing کرنے پڑے کوئی بات نہیں کرنے تھوڑی practice ہی ہو جائے گی but clarity آ جائے گی program کے اندر let's look at a few of these functions پہلا very very useful function is to copy us from one string into another string اس کا جو پروٹو تائپ ہے وہ ہے s tr cpy string copy پھر چار پوینٹر to s1 which means s1 is a string a pointer to a character is a string اور پھر کاما کونسٹ چار پوینٹر to s2 what it does is it copies اس کو انٹو اس وان بیا درکنے کا طریقہ جو آتا ہے وہ بہاں سے شروع ہوتا ہے کام اور پہلے والی بہلی ایندر values جو ہے وہ move ہوتی ہے this why did we write the cons'd سو چیں دیکھیں جس Hey ہم کوپی کریں اس کو تو ہم نے کچھ نہیں کرنا نا سو اس two better be a cons'd than کہ وہ clarity declared ہو nothing will happen to this س1 is the one جس میں ایسائن ہو رہا ہے the strings will be copied it is you have to make sure that s1 is large enough to hold s2 otherwise very strange behaviors will occur nul character جو ہے وہ automatically place ہو جائے گا after the copying operation is completed so s2 پوری کی پوری س1 میں copy ہو جائے گی end پر nul character رکھ جائے گا and i mean basically what is the return you have to also worry about that کی جی string copy function return کیا کرتا ہے the string copy function itself returns a character pointer what does that means you can use it in an assignment statement so you could see s3 where s3 itself is a 4 pointer is a pointer to a string so you can say s3 is equal to string copy but normally we don't use it like that but it's useful to know that it's itself returns a 4 pointer اور وہ pointer کیس چیز کا ہے جو بھی value s1 میں آئی ہے اس value کو ایک pointer return کیا جاتا ہے what happens if we want to copy only a certain number of characters not the entire string ہم s2 جو اس میں سے دس کریکٹرز کوپی کرنا چاہتے ہیں s1 کی اندر so we have s trn cpy یہ فنکشن ہے اس میں 4 pointer to s1 4 pointer to s2 and end n where n is the number of characters that we wish to copy from s2 into the string s1 and I will repeat again s1 must be large enough to take this number of characters in the sense that ڈرن سیپی وائے کیاندر ہم ایک سپسٹیٹ کی سٹیٹ کر دیتے ہیں کہ کتنے کارکٹرز کوپی کرنے ہیں it is probably a safer function to use than simple s trc py the next interesting one is string cat ڈرا اٹی یہ دو شرنگ کو کن کٹنیٹ کرتا ہے اپس میں جوڑتا ہے سو you could think in terms of کہ ایک string میں آپ کا فرس نیم پڑا با ہے دوسی string میں آپ کا last نیم پڑا با ہے اور آپ چاہتے ہیں ایک string بن جائے جس میں first name اور last name آجائے سو you can use the strcat function جس میں s1 اور s2 اب دو strings دیتے ہیں اور یہ اس کا بلکہ s2 کو s1 کے اخیر پے اپینڈ کر دیتا ہے اس کا بلکہ ہے کہ s1 میں جو بھی character string پڑی ہوئی تھی وہ overwrite نہیں ہوتی اس کے بعد جگے موجود ہونی چاہی ہے اس جگے میں s2 والی string کی value وہ پلیس ہو جاتی ہے استعمال کرتے وقت obviously you want to do certain niceties you want to make sure کہ for example اگر last name اور first name کو concatenate کر رہے ہیں آپ چاہیں کہ کہ جی بیچ میں تھوڑ سی جگے آئے یہ تو نہیں ہے کہ last name کا آخری character وہ last name کے first character کے ساتھ مل جائے آپ چاہتے ہیں کہ آپ کو a space character as a string first to the first name and then append any concatenate the last name so string cat is a useful function اسی کا obviously رشتدار بھی ہمارے پاس ہے strn cat جس میں ہم کہتے ہیں کہ جی s1 کے اندر s2 کے n characters وہ append کر دو where n is an integer that you specify ہم کہتے ہیں کہ جی string 2 میں سے 5 character وہ string 1 کے اخیر پے لگا دو again repeating string 1 should have enough room to take the extra characters null character جو s1 میں پہلے سے موجود تھا وہ غائب ہو جائے گا اس کی جگہ پہ نئے characters آجائیں گے اور end پہ null character automatically یہ functions place کر دیں گے let's look at some more string manipulation functions یا ان کا پہلے ہم ایک اگزامپل آپ کو دکھا دیتے ہیں تھوڑی سی چند لائمی جو ہے کوڈ کی وہ دکھائیں گے پورا program نہیں دکھاتے so that you can understand کہ جی how concatenation works so we trying to show you one part is the code and the other part is the result of these functions as they are called so we have given you a certain number of examples کچھ آپ کے ہندوٹس میں موجود ہیں لیکن as always the best way of learning these functions is to experiment with them yourself and use them inside your programs only then you will learn how to handle them اس کے بعد string comparison آجاتا ہے تو اگر آپ strcmp function دیلیں اس نے دو strings کو compared کرنا ہے again you pass it to strings s1 and s2 and it returns a value which is less than 0 or equal to 0 or greater than 0 depending on کہ جی if it determines کہ s1 you have a s2 سے کم ہے what does come mean well in a comparison obviously one thing is going to be so called less than the other so if s1 is less than s2 it returns a negative integer if s1 and s2 are rather are exactly identical it returns a 0 if s1 is in some sense greater than s2 it returns a positive integer so اس کا return type you have a int ہے پہلوں کے return type 4 pointers دے in functions کا comparison functions ہے ان کا return type int ہے remember computers are very very accurate machines when we say compared to strings as human beings اگر میں کاغس پی آپ کو hello لکتو a g l l o or آپ اپنے طور پے لکھیں hello کوئی پرنے والا اس کو دیکھے گا اور کہے گا کہ دونوں نے hello لکھا ہوئے therefore the strings are equal پرنے والا because he or she is a human being will not care کی دی میں نے capital h لکھا ہے اور آپ نے lower case h لکھا ہے وہ تو یہ دیکھے گے دونوں نے hello لکھا ہے برابر ہے computers میں they are not equal if you use a capital letter in one string and lower case version of the same character in the other string they will not compare equal آپ hello لکھیں hello کے بعد ایک space چھوڑ دیتے ہیں within the character string دوسرے hello کے اندر space نہیں ہے they will not compare as equal so be careful experiment with them and find out کجی less than cup ہوتا ہے equal to cup ہوتا ہے greater than cup ہوتا ہے equal to is obvious the strings must be exactly identical what happens if we want to compare a certain number of characters I want to see اگر string 1 کے پہلے 20 character وہی ہیں جو string 2 کے اندر ہیں so I can use the strn cmp function which is string comparison for n characters again we take s1 as a character string is the first argument s2 as a character string second argument and an int n as the third argument which says how many characters to compare it is a return جو ہے انت ہی ہوگا اگر s1 کے پہلے n characters s2 کے پہلے n characters سے کم گینے جائیں گے تو negative answer آنسر آئے گا اگر برابر ہوگے تو answer 0 ہوگا اگر s1 کے پہلے n characters جو ہے وہ s2 کے پہلے n characters سے بڑے ہوگے in some comparison sense the answer will be a positive integer comparison you should understand کجی اندر تو number store ہو رہے ہیں so compare کرنا کافی آسان ہے please verify for yourself کجی چھوٹا ایچ بڑا ہے یا capital h جو ہے وہ بڑا ہے how do they compare put them into a character string and find out for yourself once you've determined which one of the two is bigger go back to your asky program and find out their asky values see what the answer is does it make sense take a look at that I've left almost the most useful function for last but this is something that we use again and again and again character string دیو ہی ہے ایک ڈرے کے اندر پڑی ہوئی ہے ڈرے سوہ characters کی ہم نے ڈیکلیر کر دی اس میں string ڈال دی this string کتی لن بھی ہے we need a function to find out the length of a character string so we have an str l en function string length اس کو آپ ایک string pass کرتے ہیں یہ اس کی لنبائی بتا دیتی ہے what does the length of a string means it means the number of characters in the string before the null character so you can obviously write a little loop saying جب تک نل character نہیں آتا کسی ایک انٹجر ویڈیول کو انکریمنٹ کرتے جو that should be the string length so I've already given you a hint how to write your own str l en function but this is a useful function it gives us a feel for how many characters are there in a character string another set of extremely useful functions are search functions how do we search for a character inside a string یہ سرچ فنکتنس جو ہیں یہ بھی tabular form میں آپ کو پرزنٹ کیا جا رہے ہیں یہ بھی بھکندر بھی اس کا ٹیبل دیا ہوئے اس کے ساتھ بھی you should experiment and find out ان کے ساتھ explaining میں اگر یہاں پہاہت ہلا کے آپ کو بتاتا چلوں تو اتنا مزا نہیں آئے گا آپ کو actually اس کے ساتھ پلے کرنا چاہیے آپ ایک سٹرنگ کے اندر ایک کاریکٹر کو دھون سکتے ہیں اور وہ بتا دے گا کہ کس جگے پے کاریکٹر ہے یا وہاں سے آگے کی سٹرنگ کون سی ہے اس کے لیے ہمارے پاس ایک فنکشن ہے آپ ایک سٹرنگ میں دوسی سٹرنگ کو تلاش کر سکتے ہیں like آپ کے پاس ایک سٹرنگ ہے اس میں لکھا ہے this is a test تو آپ پوچھیں کہ جی اس کہاں پے ہے وہ آپ کو بتا دے گا کہ جی فلانی کاریکٹر پوزیشن پے ہے اور اس کے بعد والی سٹرنگ ہے is a test so you have another function for doing that you can do all kinds of comparisons you can say کہ جی اخیر سے شروع ہو جا مجھے بتاو ایک ہاں پی آتا ہے so you can start from the end of a string and work backwards to find the first occurrence of the character a starting from the end of the string you can always look for it from the beginning that's another function so many useful character searching or string searching functions وہ آپ کے پاس موجود ہیں ابھی تک اگر آپ کاریکٹر ہینڈلنگ اور کمپیرزنز کو کچھ ہینڈل کر سکے ہیں تو آپ دیکھیں گے کہ یہ فنکشنز جیسے جیسے آپ ان کی دیسکیپشن پڑیں گے کا دماغ چال رہا ہونا چاہی ہاں یہ تو میں بھی لکھ سکتا ہوں ہاں یہ تو میں بھی لکھ سکتا ہوں you should write them یہ میں تلکین کر رہا ہوں کہ جیسے جتنے زیادہ سے زیادہ یہ والے standard library functions آپ اپنے طور پے بھی لکھیں اور ان کو ایکسپیریمент کریں ان کے ساتھ تو آپ کو ایک تو programming expertise حاصل ہوگی دوسرا character handling جو ہے اس کے اوپر کافی دسترس حاصل ہو جائے گی because character handling is fairly important from modern day computing perspective آج کال ہمارے program جو ہم بڑے بڑے user friendly ہوتے ہیں we don't always manipulate number آج کال ہمارے programs وہ بہت user friendly ہوتے ہیں ہم ہر دفعہ صرف نمبروں کو جمات افریق نہیں کر رہا ہوتے ہم بہت ساری انگریزی کی بھی handling کر رہا ہوتے ہم چاہتے ہیں کہ جی ایک window بنے اس کے اوپر ایک title لکھا جائے اس کے اندر کچھ لکھا جائے now hard code تو چیزیں کی جا سکتی ہیں لیکن if you want a dynamic program کے اس دفعہ چلے تو window کا title یہ ہو یا چڑا ہو جائے یا اپر case میں ہو جائے you need to know how to do string handling one final function before we conclude for the day it is the str to k function string token very useful very important میں نے کہا کہ جی ایک آپ کے پاس character string ہے اس کے اندر لکھا ہوئے this is a test how do I get them as separate character string کے میرے پاس ایک string کے اندر this آجائے دوسی کے اندر is آجائے تیسری کے اندر a آجائے اور چوتھی کے اندر test آجائے well string token function جو ہے وہ tokens extract کرتا ہے string کے اندر سے اور token کیا چیز ہے it's a grouping of characters ڈیلیمیٹیڈ بای a certain character so string token کو آپ ایک string دیتے ہیں ایک delimiting character دیتے ہیں وہ آپ کو tokens ڈیلیمیٹیڈ باپس کر دیتا ہے delimiting character جو ہے that is usually a space character but you can use anything you want default اس کا ہو سکتا ہے کچھ کے space ہم استعمال کر رہے ہو لیکن quotation mark بھی ہو سکتی and so on so try this one out اس کی usage زرا سی интересی ہے اور تھوڑی سی complicated ہے پہلی دفعہ جب آپ string token کو call کریں گے تو آپ string دیں گے اور اس کو delimiting character دیں گے اور یہ پہلہ token ڈیلیمیٹیڈ باپس کر دے گا now for example میں نے کہا this is a test یہ ایک string میں پڑا ہوئے اور space character جو ہے وہ میں نے as a delimiting ڈیلیمیٹیڈ دے دیا ہے space character کیسے لکھیں گے double quotation mark space double quotation mark right wrong that is a string which has a single space a character would be single quote space single quote اس کو آپ پاس کریں یہ آپ کو پہلہ word دے دے گا next call to string token must use the word nul as n-u-l-l instead of the string name same delimiter بار بار کرتے جے جب تک یہ function بزاتے خود nul return نہیں کرتا give it a try experiment with it you will find examples in the book and learn how to use the string manipulation functions I think that is enough for today but I will leave with the same thought and the same guideline try to write these functions yourself you know enough of the language now to be able to write them you may not write the best function you may not write the most efficient function but it is useful programming practice اگلے لیکچر میں ہم جائیں گے file handling کی طرف یہاں پر ایک نئی دنیا اس کا آغاز ہوگا اس پرتہ کے لیے جازت دیجے