توابع جستجوی یک زیر رشته در رشته هایی از نوع string

توابع جستجوی یک زیر رشته در رشته هایی از نوع string:

در تمامی موارد زیر فرض کنید str رشته ای از نوع string است که بصورت زیر تعریف شده است:
string str;
//end

تابع find: این تابع جهت یافتن یک زیر رشته در یک رشته از نوع string به کار می رود. این تابع بصورت کلی زیر بکار می رود:
;(نقطه شروع جستجو ,زیر رشته مورد جستجو)int pos = str.find
عملکرد این تابع به این صورت است که اگر زیر رشته داده شده به عنوان ورودی تابع در رشته ی str یافت شود، موقعیت آن در رشته str و در غیر این صورت عدد -1 برمیگرداند.

تابع rfind: این تابع از نظر به کار گیری دقیقا مشابه تابع find است با این تفاوت که عمل جستجو را از نقطه شروع به طور معکوس (به سمت ابتدا رشته) انجام میدهد.

تابع find_first_of: این تابع رشته را به جهت یافتن اولین موقعیتی که یک کاراکتر از عناصر یک مجموعه کاراکتری وجود داشته باشد، مورد جستجو قرار می دهد و بصورت کلی زیر بکار می رود:
;(نقطه شروع جستجو ,یک مجموعه کاراکتر بصورت رشته)int pos = str.find_first_of
تابع find_first_not_of: این تابع همانند تابع find_first_of عمل کرده با این تفاوت که رشته را به جهت یافتن اولین کاراکتری که داخل یک مجموعه از کاراکتر ها نباشد، مورد جستجو قرار میدهد. در صورت یافته شدن چنین کاراکتری در رشته، موقعیت کاراکتر را در رشته بصورت یک عدد int باز میگرداند و در غیر این صورت مقدار -1 را برمیگرداند.

تابع find_last_of و find_last_not_of: این دو تابع دقیقا مشابه دو تابع قبلی عمل میکنند با این تفاوت که همانند تابع rfind رشته را از انتها به ابتدا جهت یافتن آخرین کاراکتر مورد نظر جستجو میکند.

نحوه عملکرد توابع _strupr و _strlwr

برنامه ای که نحوه عملکرد دو تابع _strupr و _strlwr را نشان میدهد:


#include
#include
using namespace std;
void main()
{
   char string[] = "The String to End All Strings!";
     cout<<"Mixed:\n"<
       cout<<"Uper:\n"<
         char* lwr_str=strlwr(string);
           cout<<"Lower:\n"<
}

//end

سورس برنامه ضرب ماتریس سه بعدی

این برنامه یک ماتریس سه بعدی از ورودی گرفته و ضرب عناصر آنرا در یک آرایه یک بعدی ذخیره و چاپ میکند.

#include

int main()
{
     int x[2][2][2], y[2]={1,1};
     for(int i=0;i<2;i++)
          for(int j=0;j<2;j++)
                for(int k=0;k<2;k++)
                {
                     cout<<"Enter: "<
                     cin>>x[i][j][k];
                }
     for(int c=0;c<2;c++)
          for(int j=0;j<2;j++)
                for(int k=0;k<2;k++)
                     y[c]*=x[c][j][k];
     cout<<"Result:"<<"\n"<
     return 0;
}

//end

برنامه انداختن تاس با دستور randomize() و random()

این برنامه تا زمانی که کاربر Enter بزنه، شروع به ریختن تصادفی تاس میکنه و عدد اون رو نمایش میده.

//This program can imagery dice rolling.
#include
#include
#define  randomize()(srand(time(0)))
#define  random(x)(rand()%x)
#include
#include

void main()
{
 cout<<"Press Enter for roll the dice and press Esc for exit.";
    int n=1;
      do{
            char ch=getch();
             if(ch==13)
                {
                    clrscr();
                    randomize();
                     switch(random(6)+1)
                    {
                         case 1:
                                  cout<
                                  break;
                         case 2:
                                  cout<
                                  break;
                         case 3:
                                  cout<
                                  break;
                         case 4:
                                  cout<
                                  break;
                         case 5:
                                  cout<
                                  break;
                         default :
                                  cout<
                      }//end of switch
                  }//end of if
             else if(ch==27)
                break;//break the loop if user press the Esc.
         }while(1);//end of DO…WHILE loop.
}


//end

تولید اعداد شبه تصادفی (C++)

در این پست دو روش برای ایجاد اعداد شبه تصادفی یکی به وسیله ی کد های مدیریت نشده و دیگری به وسیله ی کد های مدیریت شده را بررسی می کنیم. (شاید روش های دیگری برای این کار وجود داشته باشند ولی بنده تنها با این دو روش آشنا هستم.)

مدیریت نشده :
روش اول استفاده از تابع rand() برای تولید اعداد تصادفی است. این تابع در فایل cstdlib.h تعریف شده است، پس برای استفاده از آن باید این فایل را به برنامه اضافه کنید. (#include) با هر بار فراخوانی تابع rand یک عدد صحیح unsigned در محدوده ی 0 تا RAND_MAX تولید خواهد شد. 
برای مثال کد زیر سه عدد تصادفی را در سه متغیر a , b و c ذخیره می کند.

int a = rand();
int b = rand();
int c = rand();

تابع rand اعداد تصادفی را بر اساس یک عدد اولیه که هسته یا seed نامیده می شود ایجاد می کند و سپس هر عدد جدید را بر اساس عدد قبلی. مشکل اینجا است که چون این عدد ثابت است هر بار که این برنامه را اجرا کنید مقادیر یکسانی را برای سه متغیر a ، b و c دریافت خواهید کرد. برای حل این مشکل باید هسته ی اولیه را تغییر دهید، این کار با استفاده از تابع srand() انجام می شود. تابع srand مقدار هسته را به صورت یک پارامتر می پذیرد.

int a;
cin >> a;
srand(a);

در کد بالا ابتدا یک متغیر را تعریف کرده ایم و سپس آن را از ورودی دریافت می کنیم و سپس مقدار هسته را با استفاده از تابع srand برابر آن قرار می دهیم. اگر این کد را به ابتدای سه خط کد بالا اضافه کنیم و آن را اجرا کنیم سه عدد تصادفی متفاوت را در یافت خواهیم کرد. البته به شرطی که برای هسته اعداد مختلفی را وارد کنیم. میتوان از ساعت سیستم برای تنظیم هسته نیز استفاده کرد. تابع time() که در فایل ctime.h تعریف شده است، زمان فعلی سیستم را به صورت یک عدد صحیح unsigned بر می گرداند. خط زیر هسته را برابر زمان فعلی سیستم قرار می دهد.

srand(time(NULL));

چون زمان سیستم همیشه در حال تغییر است هر بار که برنامه را اجرا کنید تابع time عدد متفاوتی را برمی گرداند و در نتیجه اعداد تصادفی تولید شده متفاوت خواهند بود. نکته ی مهم اسن است که تابع srand تنها برای تنظیم هسته است و نمیتوان از آن به صورت مستقیم برای تولید اعداد تصادفی استفاده کرد.

مدیریت شده :
کلاس Random در محیط دات نت برای تولید اعداد شبه تصادفی ایجاد شده است. برای استفاده از این کلاس باید ابتدا یک نمونه از این کلاس ایجاد کنیم. خط زیر این کار را انجام می دهد.

Random^ Name = gcnew Random;

خط بالا با استفاده از عملگر gcnew یک نمونه جدید به نام Name از کلاس Random ایجاد می کند. کلاس Random دارای توابعی مانند تابع Next و NextDouble است که برای تولید اعداد تصادفی به کار می روند. با هر بار فراخوانی این توابع یک عدد تصادفی تولید می شود.

int a = Name->Next();
int b = Name->Next(100);
int c = Name->Next(100,200);

در کد بالا در هر خط از تابع Next استفاده شده است ولی هر کدام دارای پارامتر های متفاوتی هستند. فراخوانی تابع Next بدون پارامتر(مانند خط اول) باعث ایجاد عدد تصادفی در محدوده ی 0 تا ماکسیمم یک صحیح (2147483647) می شود. تابع Next با یک پارامتر (مانند خط دوم) باعث ایجاد عدد تصادفی کوچکتر از پارامتر ارسال شده می شود و در نهایت تابع Next با دو پارامتر (مانند خط سوم) باعث تولید عدد تصادفی در محدوده ی بین دو پارامتر ارسالی، می شود. میتوانید از تابع NextDouble() برای تولید اعداد اعشاری استفاده کنید ولی نباید پارامتری را به آن ارسال کنید. 

دانلود حل المسائل کتاب برنامه نویسی به زبان++c جعفر نژاد قمی

ادامه نوشته