1 / 25

نويسه و رشته CHARACTER string

نويسه و رشته CHARACTER string. رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره استفاده می شوند ثابت نويسه ای: رشته صريحی از نويسه ها است (با نوشته ای که بعد از علامت “!” در فرترن و // در C می ايد متفاوت است) مثال: “Salaam”

fionn
Download Presentation

نويسه و رشته CHARACTER string

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. پردازش اطلاعات نويسه ای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 www.um.ac.ir/~abaspour/computer

  3. پردازش اطلاعات نويسه ای در فرترنCHARACTER PROCESSING • بعضی از کامپايلر ها به جای “ “ از ‘ ‘ استفاده می کنند و بعضی هر دو را قبول دارند • "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 ". www.um.ac.ir/~abaspour/computer

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

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

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

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

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

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

  10. زير رشته ها در متغير های نويسه ای 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). www.um.ac.ir/~abaspour/computer

  11. توابع آماده مرتبط با متغير هایغير عددی (نويسه ای) در فرترن www.um.ac.ir/~abaspour/computer

  12. مثال 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 www.um.ac.ir/~abaspour/computer

  13. مثال : برنامه ای بنویسید که متنی را بخواند و فواصل بین کلمات را با کاراکتر دلخواهی عوض کند 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 www.um.ac.ir/~abaspour/computer

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

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

  16. خواندن و نوشتن رشته های نويسه ای در C • با استفاده از توابع scanf , printf • استفاده از مشخصه تبديل %s • هنگام استفاده از تابعscanf نیاز به نوشتن علامت آدرس & نیست #include <stdio.h> 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! www.um.ac.ir/~abaspour/computer

  17. تابع gets در C • در دستور scanf اگر رشته دارای فضای خالی space باشد خواندن قطع می شود چون فکر می کند رشته خاتمه يافته است • دستور gets مشکل را مرتفع می کند • این تابع يک متغير رشته ای دريافت می کند و پس از خواندن يک رشته از صفحه کليد آنرا در اين پارامتر ورودی قرار می دهد • توجه: تا کليد enter فشار داده نشود اين تابع به خواندن از صفحه کليد ادامه می دهد #include <stdio.h> 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! www.um.ac.ir/~abaspour/computer

  18. تابع puts • بجای printf puts (“hello”) puts (name) • کمتر معمول است مثال: #include <stdio.h> 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); } www.um.ac.ir/~abaspour/computer

  19. توابع کتابخانه ای برای رشته های نويسه ای در C • محل توابع رشته ای در فايل سرامد string.h • تابع strlen (مشابه LEN_TRIM () در فرترن) • رشته ای را دريافت و تعداد کاراکتر های آن را مشخص می کند (تا علامت null ) • آرگومان آن يک رشته است (معادل LEN (TRIM(string)) ) در فرترن #include <stdio.h> #include <string.h> 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 www.um.ac.ir/~abaspour/computer

  20. تابع strcpy • مخفف string copy • دو رشته را به ترتیب در یافت و رشته دوم را در اولی کپی می کند • آرگومان آن دارای دو رشته است • معمولاً برای انتساب یک ثابت رشته ای به یک متغیر رشته ای بجای = از این تابع استفاده می شود #include <stdio.h> #include <string.h> 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 www.um.ac.ir/~abaspour/computer

  21. تابع strcat • از عبارت string concatenate به معنی الحاق رشته • دو رشته را دریافت و رشته دوم را به انتهای رشته اول الحاق می کند • معادل عملگر // در فرترن #include <stdio.h> #include <string.h> 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. تابع strcmp #include <stdio.h> #include <string.h> 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); } • از string compare (مشابه عملگر های مقایسه ای در فرترن) • دو رشته را دریافت و پس از مقایسه مقادیر زیر را باز می گرداند • مساوی 0 • رشته اول بزرگتر 1+ • رشته اول کوچکتر 1- 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 www.um.ac.ir/~abaspour/computer

  23. تابع strstr #include <stdio.h> #include <string.h> 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); } } • دو رشته را دریافت (تقریبا مشابه تابع INDEX در فرترن) • در رشته اول، رشته دوم را جستجو می کند • در صورت پیدا شدن مکان اولین کاراکتر آن در رشته دوم را باز می گرداند • اگر نباشد مقدار 1- را بر می گرداند • در صورت تکرار باز هم مکان اولین نمونه را باز می گرداند 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 www.um.ac.ir/~abaspour/computer

  24. تابع strrev • از string reverse • تابع رشته ای را گرفته و معکوس می کند #include <stdio.h> #include <string.h> 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 www.um.ac.ir/~abaspour/computer

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

More Related