دوست عزیز، به سایت علمی نخبگان جوان خوش آمدید

مشاهده این پیام به این معنی است که شما در سایت عضو نیستید، لطفا در صورت تمایل جهت عضویت در سایت علمی نخبگان جوان اینجا کلیک کنید.

توجه داشته باشید، در صورتی که عضو سایت نباشید نمی توانید از تمامی امکانات و خدمات سایت استفاده کنید.
نمایش نتایج: از شماره 1 تا 8 , از مجموع 8

موضوع: توابع کتابخانه ای رشته ای

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #6
    دوست آشنا
    رشته تحصیلی
    C@/\/\P\/T(-R
    نوشته ها
    1,138
    ارسال تشکر
    8,061
    دریافت تشکر: 4,739
    قدرت امتیاز دهی
    7124
    Array
    Outta_Breathe1020's: جدید59

    پیش فرض strstr

    اين تابع دو رشته را دريافت و در رشته اول به دنبال رشته دوم جستجو مي كند و در صورت پيدا شدن، مكان اولين كاراكتر آن را باز مي گرداند. در صورتيكه در رشته اول چندين نمونه از رشته دوم وجود داشته باشد، مكان اولين نمونه را باز مي گرداند. پياده سازي اين تابع در زير آمده است:

    کد:
    
    void strstr(const char str1[], const char str2[]) {
       int i, j ;
     
       for (i=0; str1[i]; i++) 
           if (str1[i] == str2[0]) {
               for (j=1; str2[j] && str1[i+j] == str2[j] ; j++) ;
               if (!str2[j]) return(i);
           }
      
       return(-1) ;
    }
     

    درك نحوه كار اين تابع نياز به دقت دارد. حلقه for اول تك تك عناصر str1 را با اولين عنصر str2 مقايسه مي كند. چنانچه يكي از اين عناصر با str2[0] برابر بود، آنگاه حلقه for دوم شروع به مقايسه عناصر بعدي str1 (از محل i به بعد) و str2 (از محل 0 به بعد) مي نمايد. به شرط حلقه for دوم دقت كنيد. اين حلقه تا زمانيكه str2 به انتها نرسيده و همچنين عنصر بعدي str2 و str1 با يكديگر برابر باشند، تكرار مي گردد. دقت كنيد كه بدنه حلقه خالي است. بعد از پايان حلقه بررسي مي گردد كه چنانچه دليل خروج از حلقه به پايان رسيدن str2 بوده است (يعني str2[j] برابر null شده است)، بنابراين رشته مورد نظر پيدا شده و مكان شروع آن يعني i بازگردانده مي شود. در غير اينصورت، دليل خروج مساوي نبودن دو كاراكتر از دو رشته بوده است، بنابراين عمليات جستجو ادامه مي يابد. البته تابع فوق بهينه نيست. چرا كه هنگامي كه در رشته اول، شمارنده به مكاني برسد كه تعداد كاراكترهاي باقيمانده تا پايان رشته كمتر از اندازه رشته دوم باشد، قطعا ادامه جستجو لزومي ندارد، چرا كه رشته دوم پيدا نخواهد شد.

    براي روشن شدن موضوع، به برنامه زير دقت كنيد:(دريافت برنامه)
    کد:
    
    void main() {
       char text[100], word[20];
       int i, n, result ;
     
       printf("enter a text : ");
       gets(text) ;
       printf("how many words do you have : ");
       scanf("%d",&n) ;
     
       for (i=0; i<n; i++) {
          printf("enter a word to search : ") ;
          gets(word);
          result = strstr(text, word) ;
          if (result == -1) 
              printf("(%s) not foundn",word);
          else printf("(%s) is founded in position %dn", word, result);
       }
    }

    و مجازات تخفیف یافته ات این بار حبس ابد در این دنیاست...!!!

    Nearly 1 billion people go to bed hungry every night and every year 2 million children die from malnutrition

    شاید صدای مرگ بود که میگفت: تو هم اگر قاتل نباشی، سارق حیات این ها بوده ای...

  2. 3 کاربر از پست مفید Outta_Breathe1020 سپاس کرده اند .


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 4
    آخرين نوشته: 9th August 2014, 08:59 PM
  2. تصویر: jتصاویر حمله به اتوبوس تراکتورسازی در رشت
    توسط m.g.s.t.r در انجمن اخبار ورزشی
    پاسخ ها: 3
    آخرين نوشته: 8th February 2013, 09:11 PM
  3. پاسخ ها: 0
    آخرين نوشته: 15th August 2011, 03:49 PM
  4. آموزشی: آموزش فتوشاپ - اعمال خالکوبی بروی تصاویر در فتوشاپ
    توسط آبجی در انجمن آموزش و ابزارهای فتوشاپ
    پاسخ ها: 0
    آخرين نوشته: 30th June 2010, 11:32 PM
  5. پاسخ ها: 0
    آخرين نوشته: 12th November 2009, 07:39 PM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •