Presentation is loading. Please wait.

Presentation is loading. Please wait.

Www.um.ac.ir/~abaspour/computer1 نويسه و رشته CHARACTER string رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره.

Similar presentations


Presentation on theme: "Www.um.ac.ir/~abaspour/computer1 نويسه و رشته CHARACTER string رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره."— Presentation transcript:

1 www.um.ac.ir/~abaspour/computer1 نويسه و رشته CHARACTER string رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره استفاده می شوند ثابت نويسه ای: رشته صريحی از نويسه ها است (با نوشته ای که بعد از علامت “!” در فرترن و // در C می ايد متفاوت است) مثال: “Salaam” “What is your name?” همانطور که ملاحظه می شود برای تعيين ثابت نويسه ای در فرترن و C از علامت نقل قول ( “ “ ) استفاده می شود متغير نويسه ای: يعنی نامی که نماينده نويسه ها يا رشته نويسه های اختياری است مثال:soft=“silk” Hard=“Steel” WRITE (*,*)soft, hard نتيجه چاپ به صورت: silksteel خواهد بود

2 www.um.ac.ir/~abaspour/computer2 پردازش اطلاعات نويسه ای CHARACTER PROCESSING مواقعی استفاده می شوند که با اطلاعات غير عددی کار نمائيم به صورت يک حرف يا رشته ای از حروف می باشند مثال (استفاده از ثابت های غيرعددی در برنامه خروجی را به مقدار زياد بهبود می بخشد): WRITE (6,*) `Please type a value for the radius of a circle' READ (5,*) radius area = pi*radius*radius WRITE (6,*) `The area of a circle of radius `, radius, & ` is `, area کليه حروفی که به صورت نوشته در داخل “ “ می ايند به صورت يکسانی به صورت خروجی در فايل يا مونيتور ظاهر می شوند Please type a value for the radius of a circle 12.0 The area of a circle of radius 12.0 is 452.38925

3 www.um.ac.ir/~abaspour/computer3 بعضی از کامپايلر ها به جای “ “ از ‘ ‘ استفاده می کنند و بعضی هر دو را قبول دارند "This string contains an apostrophe `." `This string contains a double quote ".` "This string contains an apostrophe ` and a double quote “.“ که در خروجی به صورت: This string contains an apostrophe `. This string contains a double quote ". This string contains an apostrophe ` and a double quote ". پردازش اطلاعات نويسه ای در فرترن CHARACTER PROCESSING

4 www.um.ac.ir/~abaspour/computer4 نحوه اعلانِ DECLARATION CHARACTER:: yesorno, gender مقادير اختصاص داده شده به يک متغيير غير عددی ممکن است به صورت ثابت حرفی باشند yesorno = `N' gender = `F‘ با اين وجود کاربرد اصلی متغيير های غير عددی در ذخيره کردن رشته ای از حروف می باشد.

5 www.um.ac.ir/~abaspour/computer5 مثال CHARACTER (LEN=12) :: surname, firstname CHARACTER (LEN=6) :: initials, title title = `Prof.` initials = `ado` firstname = `ali` surname = ‘dostee’ به دستور LEN توجه شود که بيان کننده تعدادکاراکتری است که متغير مربوط می تواند داشته باشد. می توان همچنين از ثابت INTEGER به جای عدد استفاده کرد

6 www.um.ac.ir/~abaspour/computer6 طول ارايه تعيين شده LEN بايد به گونه ای انتخاب شود که به صورت مطمئنی تمام کاراکترها را در بر گيرد اگر طول ارايه بيشتر از تعداد کاراکترها ی متغير در نظر گرفته شود محل های باقی مانده به صورت فضای خالی باقی می ماند اگر طول ارايه کمتر در نظر گرفته شود از سمت چپ شروع می گردد Title=‘professor’ معادل Title=‘profes ’ می توان کلمه LEN را حذف کرد و در داخل پرانتز از عدد تنها استفاده کرد اگر از دستور LEN استفاده نشود طول رشته (1) در نظر گرفته می شود اگر به جای عدد از (*) استفاده شود طول بر حسب طول واقعی ارايه تعيين خواهد شد (در توابع نه برنامه اصلی) CHARACTER (*):: Surname=‘ahmadzadeh’

7 www.um.ac.ir/~abaspour/computer7 استفاده از (‘ ) و ( “ ) در يک نويسه اگر بخواهيم عبارت زير چاپ شود: Use “==“ instead of “E.Q.” please. دستور فرترن آن به صورت زير نوشته می شود: Remark= “Use ” ”==“ “ instead of “ “E.Q.” “ please” يعنی وقتی خود علامت “ جزو ارايه است بايستی دو بار پشت سر هم نوشته شود

8 www.um.ac.ir/~abaspour/computer8 عملگر های منطقی در ارايه های نويسه ای عملگرهای منطقی: =, >,/=,== اِين عملگر ها را می توان علاوه بر کميت های عددی در مورد ارايه های غير عددی نيز به صورت زير بکار برد: IF (String1==“sir”.AND. string2>string3) THEN...

9 www.um.ac.ir/~abaspour/computer9 کاربرد متغير های نويسه ای عملگرهای محاسباتی + ، - ،....در اين متغيرها نبايد استفاده شوند تنها عملگر مورد استفاده در اين نوع متغير ها علامت // است که جهت اتصال متغير های نويسه ای استفاده می شود (همانند عمل جمع) CHARACTER (len=24) :: name CHARACTER (len=6) :: surname surname = `Bloggs' name = `Prof `//` Mrs. /Mr. `//surname اگر تعداد کاراکتر name از 24 تجاوز نمايد ويا کمتر باشد همان قاعده کلی انجام خواهد شد

10 www.um.ac.ir/~abaspour/computer10 زير رشته ها در متغير های نويسه ای Substrings از زير رشته می توان استفاده نمود تا از بخشی از ارايه اختصاص داده شده به يک متغير غير عددی استفاده شود فرم کلی (start-position : end-position) نقاط شروع و خاتمه حتماً بايد INTEGER باشند نقطه شروع هميشه مساوی يا بزرگتر از 1 و نقطه خاتمه بايد کوچکتر يا برابر طول کل ارايه باشد CHARACTER (LEN=7) :: lang lang = `Fortran' WRITE (6,*) lang(1:1), lang(2:2), lang(3:4), lang(5:7) که نتيجه خروجی به صورت زير خواهد بود: Fortran اگر نقطه شروع حذف شود عدد 1 در نظر گرفته خواهد شد. اگر نقطه خاتمه حذف شود حداکثر طول ارايه منظور می شود lang(:3) is equivalent to lang(1:3) lang(5:) is equivalent to lang(5:7).

11 www.um.ac.ir/~abaspour/computer11 توابع آماده مرتبط با متغير های غير عددی (نويسه ای) در فرترن تابععمليات LEN (string) مقدار طول يک متغير نويسه ای LEN (‘Newzealand’) برابر 10 است INDEX (sub, string) محل شروع زير ارايه را دريک ارايه می دهد INDEX (‘dostee’, ‘alidostee’) برابر 4 است CHAR (int) تبديل INTEGER به CHARACTER ICHAR (char) تبديل CHARACTER به INTEGER TRIM (string) معادل اندازه ارايه بدون احتساب کاراکترهای خالی TRIM (“Four “) برابر “four” است

12 www.um.ac.ir/~abaspour/computer12 مثال CHARACTER(len=12) :: surname, firstname INTEGER :: length, pos... length = LEN(surname) !len=12 firstname = `Walter` pos = INDEX( firstname, “al”) !pos=2 firstname = `Fred` pos = INDEX( firstname, “al”) !pos=0 length = LEN(TRIM(firstname)) !len=4

13 www.um.ac.ir/~abaspour/computer13 مثال : برنامه ای بنویسید که متنی را بخواند و فواصل بین کلمات را با کاراکتر دلخواهی عوض کند program test character(30)::text, newtext character::sep read*,text,sep newtext="" do i=1,len_trim(text) if(text(i:i)==" " )then newtext(i:i)=sep else newtext(i:i)=text(i:i) end if end do print*,text,newtext, end program test

14 www.um.ac.ir/~abaspour/computer14 رشته ها در C همانند فرترن از مشخصه کاراکتر char استفاده می شود char name[10] متغِير نويسه ای name بعنوان آرايه ای 10 عضوی از کاراکتر ها تعريف شده است (بصورت آرایه ای از کاراکتر) کاراکتر علامت تهی null با کد اسکی (\0) –برای تعيين انتهای يک رشته که در يک متغير نويسه ای با تعداد بيشتر عضو char name[10]={‘a’,’l’,’i’,’\0’} هنگام تعريف رشته بايد جا برای عنصر کاراکتر null در نظر گرفت نحوه ذخيره مقدار ahmad در متغير name ahmad\0

15 www.um.ac.ir/~abaspour/computer15 استفاده از ثابت های نويسه ای برای مقدار دهی اوليه متغير های نويسه ای char name [10]=“ahmad”; char address[50]=“no.20 azadi street”; هنگام استفاده از ثابت نويسه ای برای مقدار دهی اوليه يک متغير نويسه ای کامپيوتر خود يک کاراکتر null به انتهای رشته اضافه می کند در c بجز در هنگام مقدار دهی اوليه نمی توان از (=) عملگر انتساب استفاده نمود –دستور زير غلط است char name[10]; ……. ………. name=“Ali”; در C رشته ها در واقع ارایه هستند و لذا نمی توان با یک دستور انتساب همه را یکجا مقدار دهی کرد

16 www.um.ac.ir/~abaspour/computer16 خواندن و نوشتن رشته های نويسه ای در C با استفاده از توابع scanf, printf استفاده از مشخصه تبديل %s هنگام استفاده از تابعscanf نیاز به نوشتن علامت آدرس & نیست #include void main() { char name[20]; printf(“what is your name?”); scanf(“%s”, name); printf(“hello %s!”,name); } What is your name? Ali Hello Ali! What is your name? Mohammad Hossein Hello Mohammad!

17 www.um.ac.ir/~abaspour/computer17 تابع gets در C در دستور scanf اگر رشته دارای فضای خالی space باشد خواندن قطع می شود چون فکر می کند رشته خاتمه يافته است دستور gets مشکل را مرتفع می کند –این تابع يک متغير رشته ای دريافت می کند و پس از خواندن يک رشته از صفحه کليد آنرا در اين پارامتر ورودی قرار می دهد –توجه: تا کليد enter فشار داده نشود اين تابع به خواندن از صفحه کليد ادامه می دهد #include void main() { char name[20]; printf(“what is your name?”); gets(name); printf(“hello %s!”,name); } What is your name? Mohammad Hossein Hello Mohammad Hossein!

18 www.um.ac.ir/~abaspour/computer18 تابع puts بجای printf puts (“hello”) puts (name) کمتر معمول است مثال: #include void main() { char name[20], surname[30]; printf("what is your name?"); gets(surname); // printf("hello %s!\n",surname); scanf("%s", name); //printf("hello %s !\n",name); puts("hello"); puts(name); }

19 www.um.ac.ir/~abaspour/computer19 توابع کتابخانه ای برای رشته های نويسه ای در C محل توابع رشته ای در فايل سرامد string.h –تابع strlen (مشابه LEN_TRIM () در فرترن) رشته ای را دريافت و تعداد کاراکتر های آن را مشخص می کند (تا علامت null ) آرگومان آن يک رشته است (معادل LEN (TRIM(string)) ) در فرترن #include void main() { int len; char text[100]; printf(“enter a text!”); gets(text); len=strlen(text); printf(“the lengt of your text is %d”,len); } Enter a text! Hello The lengt of your text is 5

20 www.um.ac.ir/~abaspour/computer20 تابع strcpy مخفف string copy –دو رشته را به ترتیب در یافت و رشته دوم را در اولی کپی می کند –آرگومان آن دارای دو رشته است –معمولاً برای انتساب یک ثابت رشته ای به یک متغیر رشته ای بجای = از این تابع استفاده می شود #include void main() { char string1[20], string2[20]; printf(“please enter string1 :”); gets(string1); Strcpy (string2,string1); Printf(“copy string1 into string2\n”); printf(“now string1= %s and string2= %s”,string1,string2); Printf(“ Copy new into string1\n”); Strcpy (string1,”new”); // عمل انتساب به یک متغیر نویسه ای Printf(“now string1 = %s”,string1); } Please enter string1: hello Copy string1 into string2 Now string1 = hello and string2 = hello Copy new into string1 Now string1= new

21 تابع strcat از عبارت string concatenate به معنی الحاق رشته دو رشته را دریافت و رشته دوم را به انتهای رشته اول الحاق می کند معادل عملگر // در فرترن #include void main() { char string1[20], string2[20]; printf(“please enter string1 :”); gets(string1); printf(“please enter string2:”); gets(string2); strcat(string1, string2) printf(“ concatenation of string1and string2 is: %s”,string1); } Please enter string1: hello Please enter string2: everybody! concatenation of string1and string2 is: hello everybody!

22 www.um.ac.ir/~abaspour/computer22 تابع strcmp از string compare (مشابه عملگر های مقایسه ای در فرترن) دو رشته را دریافت و پس از مقایسه مقادیر زیر را باز می گرداند –مساوی 0 –رشته اول بزرگتر 1+ –رشته اول کوچکتر 1- #include void main() { char string1[20], string2[20]; int result; printf("please enter string1 :"); gets(string1); printf("please enter string2 :"); gets(string2); result=strcmp (string1,string2); if (result==0) printf("%s equals %s\n",string1, string2); else if(result>0) printf("%s is greater than %s\n",string1, string2); else printf("%s ls less than %s\n",string1, string2); } please enter string1 : ali please enter string2: ahmad ali is greater than ahmad please enter string1 : ali please enter string2: alireza ali is less than alireza

23 www.um.ac.ir/~abaspour/computer23 تابع strstr دو رشته را دریافت (تقریبا مشابه تابع INDEX در فرترن) –در رشته اول، رشته دوم را جستجو می کند –در صورت پیدا شدن مکان اولین کاراکتر آن در رشته دوم را باز می گرداند –اگر نباشد مقدار 1- را بر می گرداند –در صورت تکرار باز هم مکان اولین نمونه را باز می گرداند #include void main() { char text [100], word[20]; Int I, n, result; printf("please 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 found \n”,word); else printf (“(%s) is found at position %d\n”,word,result); } Enter a text: this is a sample text! How many word do you have:3 Enter a word to search: sample (sample is found at position 10 Enter a word to search: is (is) is found at position 2 Enter a word to search: test (test) not found

24 www.um.ac.ir/~abaspour/computer24 تابع strrev از string reverse –تابع رشته ای را گرفته و معکوس می کند #include void main() { char word[20]; printf(" enter a word :"); gets(word); printf(“reverse of %s is:“, word); strrev (word) printf (“%s”,word); } Enter a word: hello Reverse of hello is olleh

25 www.um.ac.ir/~abaspour/computer25 تابع atoi –از ascii to integer –در فایل سرامد stdlib.h –رشته ای متشکل از اعداد و +، - را گرفته تبدیل به عدد صحیح می کند (“3478” را به 3478) تابع itoa –integer to ascii –تبديل عدد به رشته تابع atof (تبديل رشته به اعشاری) تابع atol (تبدیل رشته به صحيح بلند) برای ديگر توابع به help مراجعه کنید


Download ppt "Www.um.ac.ir/~abaspour/computer1 نويسه و رشته CHARACTER string رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره."

Similar presentations


Ads by Google