رشته ها (Strings) در برنامه نویسی ++ C

ما در فصول قبل با آرایه ها آشنا شدیم. در برنامه نویسی C++ نوع خاصی برای رشته ها یا همان String وجود ندارد و در این مورد باید از آرایه ای از کاراکترها استفاده کنیم. البته در Visual C++ میشه از فضای نامی std در مورد رشته ها استفاده کرد که کار را راحتتر می کند اما چون ما در Borland برنامه نویسی می کنیم نمی توانیم مستقیما با یک متغیر از نوع string کار کنیم .

قبلا یادگرفتیم که اعداد و کاراکترها را چگونه در آرایه قرار دهیم. برای استفاده از رشته ها باید از آرایه دو بعدی با نوع کاراکتر استفاده کنیم. به این نکته توجه نمایید که در زبان برنامه نویسی C++، رشته ها را بین ” ” و کاراکترها را بین ‘ ‘ قرار خواهیم داد. در زیر به نحوه تعریف یک رشته می پردازیم :

همانطور که در بالا می بینیم، نحوه تعریف یک رشته مانند تعریف یک آرایه است و از قوانین آرایه ها تبعیت می کند با این تفاوت که اگر مقدار بصورت رشته باشد باید آنرا در بین ” ” قرار دهیم و اگر مقادیر بصورت کاراکتر باشند آنها را در بین ‘ ‘ و بصورت مجموعه مقداردهی خواهیم کرد .

نکته) در مقداردهی یک String باید بدانیم که انتهای آن آرایه با تهی یا Null مشخص می شود. یعنی در خط اول از کد یالا یک آرایه بوجود خواهد آمد که اولین خانه آن حرف p و دومین خانه آن حرف r و علی آخر که در نهایت یکی مانده به آخرین خانه حرف g و آخرین خانه Null یا  می باشد .

در خط دوم ما Stringی را با طول ۱۰ تعریف و مقداردهی کرده ایم، اما عبارت computer از ۷ حرف تشکیل شده و آخرین خانه هم شامل  برای تعیین انتهای String خواهد بود که ۲ خانه بلا استفاده باقی خواهد ماند .

در خط سوم چونکه ما رشته را بصورت کاراکتری در نظر گرفته ایم باید بصورت دستی مقدار  در انتهای مقداردهی String وارد نماییم تا به اینصورت کامپایلر متوجه پایان آن شود .

نکته) در تعریف و مقدار دهی یک String باید طول آرایه را همیشه یک واحد بیشتر از طول مورد نیاز انتخاب نماییم و دلیل آن مشخص نمودن انتهای آرایه با استفاده از کاراکتر تهی (\۰) است .

همانطور که در بالا می بینیم، نحوه تعریف یک رشته مانند تعریف یک آرایه است و از قوانین آرایه ها تبعیت می کند با این تفاوت که اگر مقدار بصورت رشته باشد باید آنرا در بین ” ” قرار دهیم و اگر مقادیر بصورت کاراکتر باشند آنها را در بین ‘ ‘ و بصورت مجموعه مقداردهی خواهیم کرد .

نکته) در مقداردهی یک String باید بدانیم که انتهای آن آرایه با تهی یا Null مشخص می شود. یعنی در خط اول از کد یالا یک آرایه بوجود خواهد آمد که اولین خانه آن حرف p و دومین خانه آن حرف r و علی آخر که در نهایت یکی مانده به آخرین خانه حرف g و آخرین خانه Null یا  می باشد .

در خط دوم ما Stringی را با طول ۱۰ تعریف و مقداردهی کرده ایم، اما عبارت computer از ۷ حرف تشکیل شده و آخرین خانه هم شامل  برای تعیین انتهای String خواهد بود که ۲ خانه بلا استفاده باقی خواهد ماند .

در خط سوم چونکه ما رشته را بصورت کاراکتری در نظر گرفته ایم باید بصورت دستی مقدار  در انتهای مقداردهی String وارد نماییم تا به اینصورت کامپایلر متوجه پایان آن شود .

نکته) در تعریف و مقدار دهی یک String باید طول آرایه را همیشه یک واحد بیشتر از طول مورد نیاز انتخاب نماییم و دلیل آن مشخص نمودن انتهای آرایه با استفاده از کاراکتر تهی (\۰) است .

همانطور که در کد C++ با مشاهده می کنید تابع cin.get() دارای دو پارامتر ورودی است. اولین آرگومان شامل نام آرایه یا همان متغیر String است بهمراه اندیس عنصر مورد نظر و دومین آرگومان مربوط به بیشترین طول متغیر است. دقت کنید که این مقدار تخمینی از بیشترین طول ممکن برای یک نام کامل است و ضرورتی ندارد که نامها حتما هم مقدار با عدد مشخص شده باشد .

در کاملترین حالت از بکارگیری تابع cin.get() می توان آرگومان سومی نیز برای آن در نظر گرفت که مشخص کننده کاراکتر پایانی آرایه است، یعنی با نوشتن آرگومان سوم، کاربر برای کامپایلر تعیین می کند که با رسیدن به کدام کاراکتر انتهای آرایه یا همان String را مشخص نماید. بعنوان مثال در کد زیر از نقطه بعنوان کاراکتر پایانی بهره گرفته ایم، مشخص کرده ایم که فقط ۱۵ کاراکتر اول را در نظر بگیرد. یعنی اگر نام از ۱۵ کاراکتر بیشتر شد از کاراکتر ۱۵ به بعد را در نظر نگیرد و اگر کمتر از ۱۵ شد با فشار دادن دکمه نقطه از کیبرد پایان آنرا مشخص نماید .

  • انتساب رشته ها یا کپی کردن رشته ها در یکدیگر :

اگر دارای دو متغیر از نوع صحیح به نامهای aوb باشیم برای انتساب آنها از عملگر تساوی برای این منظور استفاده می کردیم(a=b;). اما در مبحث string نمی توانیم برای برابری دو رشته از این عملگر استفاده کنیم. برای انتساب یا کپی یا برابر قرار دادن یک رشته با رشته ای دیگر باید از تابعstrcopy(string1,string2) که در فایل سرآیند <string.h> قرار دارد استفاده کنیم.

با اجرای تابع strcopy هرآنچه که در آرگومان دوم وجود دارد در آرگومان اول کپی خواهد شد، یعنی مقدار str2 در str1 قرار خواهد گرفت .

نکته) در استفاده از این تابع باید توجه کنید که اگر طول آرگومان دومی از اولی بیشتر باشد به اندازه ظرفیت رشته اول کپی شده و مابقی در خانه های حافظه بلافاصله بعد از رشته اول کپی خواهد شد، بنابر این اگر مقادیر مهمی بعد از رشته اول در حافظه وجود داشته باشند از بین میروند .

برای مقایسه دو متغیر از نوع صحیح یا اعشاری یا کاراکتری از دستور (if(x==y)) استفاده کردیم. در مورد string ما از تابع strcmp() بهره می گیریم. تابعstrcmp() نیز در فایل سرآیند <string.h> قرار دارد .

 

در صورت برابری دو مقدار، تابع عدد صفر و اگر str1<str2 باشد تابع مقدار منفی برمی گرداند یعنی str1 از str2 کوچکتر است و در حالی که str1>str2 تابع مقدار مثبتی را برمی گرداند یعنی اینکه str1 از str2 بزرگتر است .

در کد بالا بنابر توضیحات داده شده، تابع strcmp مقداری منفی را بر میگرداند .

برای الحاق دو string از تابع strcat() استفاده خواهیم نمود که این تابع هم در فایل سرآیند <string.h> وجود دارد .

تابع strcat مقدار string دوم را در ادامه string اول قرار می دهد و باید توجه نمود اگر طول str1 از نتیجه نهایی کمتر باشد کاراکترهای باقی مانده در ادامه str1 در حافظه قرار خواهند گرفت و اگر در آنجا متغیرهایی باشند از بین خواهند رفت .

اشتراك گذاری نوشته

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *