سرفایل string.h


این سرفایل شامل بسیاری از توابع پر کاربرد برای رشته ها می باشد.

انتساب رشته ها  (strcpy  (s1 , s2

مقایسه دو رشته (strcmp (s1 , s2

الحاق دو رشته   (strcat   (s1 , s2

انتساب رشته ها


انتساب رشته ها به معنی کپی کردن یک رشته در رشته دیگر است . با استفاده از عملگر = نمی توان رشته را انتساب کرد. یعنی اگر s1 و s2 آرایه هایی کاراکتری (رشته) باشند, استفاده از دستور زیر نادرست است:

s1 = “sahand”;

s2=s1;

برای کپی کردن رشته ای در رشته دیگر و یا انتساب رشته ای به رشته دیگر از تابع ()strcpy استفاده می شود. این تابع در سرفایل string.h قرار دارد و به صورت زیر بکار می رود:

strcpy (str1 , str2);

str2 می تواند رشته ای از کاراکتر ها (مانند “sahand”) و یا یک متغیر رشته ای باشد. با اجرای این دستور ,مقادیری که در str2 قرار دارند در str1 کپی می شوند.

اگر طول str2 بیش از طول str1 باشد, تا جایی که عمل کپی کردن امکان پذیر باشد ,عمل کپی در آن رشته صورت می گیرد و کاراکتر های اضافی بلافاصله پس از str1 قرار می گیرند. در نتیجه , اگر متغیرهایی بعد از str1 قرار داشته باشند, محتویات آن ها از بین خواهد رفت.

مقایسه رشته ها


اگر بخواهیم دو متغیر صحیح x و y را با هم مقایسه کنید, از دستور (if (x == y استفاده می کنیم. اما برای مقایسه دو رشته s1 و s2 نمی توان از (if (s1 == s2 استفاده کرد.برای مقایسه رشته ها از تابع ()strcmp استفاده می شود. این تابع به صورت زیر به کار می رود

:

strcmp(s1 , s2)

حاصل کار این تابع یک عدد است که مقدار آن بیانگر وضعیت دو رشته نسبت به هم است .اگر عدد بر گردانده شده توسط تابع:

  • برابر با صفر باشد , s1 =s2 می باشد.
  • منفی باشد , s1
  • مثبت باشد , s1>s2 می باشد.

منظور از مقایسه رشته ها, مقایسه کاراکتری آن ها می باشد. اولین کاراکتر از رشته اول با اولین کاراکتر از رشته دوم مقایسه می شود. اگر مساوی باشند , کاراکترهای بعدی با هم مقایسه می شوند. اگر تمام کاراکترهای دو رشته با هم مساوی باشند, آن دو رشته با هم مساویند .  با رسیدن به اولین مورد اختلاف , کاراکتری که بزرگتر است (یعنی کد اسکی آن بزرگتر است) رشته حاوی آن کاراکتر ,بزرگتر خواهد بود.

الحاق دو رشته


الحاق کردن دو رشته به معنی قرار دادن یک رشته در انتهای رشته دیگر است. برای مثال اگر s1 برابر با “sahand” و s2 برابر با “university” باشد , الحاق s2 به انتهای s1 می شود تا s1 حاوی رشته “sahand university”  شود. تابع ()strcat برای الحاق دو رشته به صورت زیر به کار می رود:

strcat( s1 , s2 );

با این دستور , s2 در انتهای رشته s1 قرار می گیرد. s2 می تواند متغیر رشته ای و یا رشته ای دلخواه باشد.s1 همواره متغیری رشته ای (آرایه کاراکتری) است. چنانچه طول رشته s1 طوری باشد که گنجایش s2 را نداشته باشد , بقیه رشته s2 در ادامه رشته s1 قرار می گیرد و در نتیجه چنانچه متغیرهایی بعد از s1 وجود داشته باشند , محتویات آن ها از بین می رود.

آرایه ای از رشته ها


در مواردی که می خواهیم تعداد زیادی رشته را تعریف کرده و مورد استفاده قرار دهیم , از آرایه ای از رشته ها استفاده می کنیم. برای مثال اگر بخواهیم اسامی دانشج.یان یک کلاس را ذخیره کنیم. آرایه ای از رشته یعنی همان آرایه ای از آرایه ها که همان آرایه دو بعدی است . پس می توان آرایه ای دو لعدی تعریف کرد که بعد اول رشته ها و بعد دوم طول هر رشته را نشان دهد.

14 پاسخ
  1. ستاره
    ستاره گفته:

    سلام
    خیلی مچکرم از مطالب خوبتون به خصوص بیان مثال ها باعث شده بود نکات ریز که سایت های دیگر مطرح نکردن قابل فهم تر بشه
    بسیار ممنون از لطف تون

    پاسخ
  2. Marzie
    Marzie گفته:

    با سلام ،میخوام یه آرایه رو با یک رشته مقایسه کنم رشته بیشتر از ۷ کاراکتر باشه انجام نمیشه با اینکه آرایه ۲۰تا خونه داره،نمیدونم این محدودیت تو تابع strcmp براچیه؟ ممنون میشم کمک کنین

    پاسخ
  3. اشکان
    اشکان گفته:

    سلام متشکر از توضیحات خوبتون
    من یه سوال داشتم می‌خوام یک رشته یا ارایه ۵ کاراکتری رو با یه ارایه ۱۰ کاراکتری مقایسه کنم و اگر این ۵ کارکتر درون ارایه ۱۰ کاراکتری بود یه دستوری رو اجرا کنم یا مثل strcmpf عدد ۱ رو برگردونه
    البته میشه اسمش رو جستجو هم گذاشت که ۵ کاراکتری رو در ۱۰ کاراکتری جستجو کنه
    مشکل بعد بنده اینجاست که تعداد کارکتر اون آرایه ای که می‌خوام مقایسه بشه مشخصه اما ارایه مقایسه شونده متغیریه ممکنه ۱۰_۱۵ یا بالاتر باشه
    ممنون میشم کمکم کنید

    پاسخ
  4. مریم
    مریم گفته:

    سلام حال شما ..اگه بخواهیم در برنامه اسم ی سری درس را به همراه کد درس و هزینه هردرس را چاپ کنیم باید چکار کنیم؟

    پاسخ
  5. Fatemh
    Fatemh گفته:

    سلام چطور میشه بدون استفاده از strcat تابعی نوشت که یک رشته رو به انتهای دیگری الحاق کند؟

    پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

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

© کپی رایت - www.irccode.ir