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

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

Upload: fionn

Post on 08-Jan-2016

69 views

Category:

Documents


4 download

DESCRIPTION

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

TRANSCRIPT

Page 1: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 1

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

Aliرشته عبارتست از توالی از صفر يا چند کاراکتر مثل •برای ذخيره مواردی مثل اسم و آدرس و غيره استفاده می شوند• رشته صريحی از نويسه ها است ثابت نويسه ای:•

می ايد C)با نوشته ای که بعد از عالمت “!” در فرترن و // در متفاوت است(

”Salaam“ مثال: “What is your name?”

همانطور که مالحظه می شود برای تعيين ثابت نويسه ای در فرترن از عالمت نقل قول ) “ “ ( استفاده می شودCو

: يعنی نامی که نماينده نويسه ها يا رشته متغير نويسه ای•نويسه های اختياری است

”soft=“silkمثال:

Hard=“Steel”WRITE (*,*)soft, hard

خواهد بودsilksteel نتيجه چاپ به صورت:

Page 2: نويسه و رشته  CHARACTER string

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

Page 3: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 3

استفاده می کنند و ‘ ‘بعضی از کامپايلر ها به جای “ “ از •بعضی هر دو را قبول دارند

• "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

Page 4: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 4

DECLARATIONنحوه اعالن�

• CHARACTER:: yesorno, genderمقادير اختصاص داده شده به يک متغيير •

ثابت غير عددی ممکن است به صورت باشندحرفی

• yesorno = `N' • gender = `F‘

با اين وجود کاربرد اصلی متغيير های •غير عددی در ذخيره کردن رشته ای از

حروف می باشد.

Page 5: نويسه و رشته  CHARACTER string

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ثابت

Page 6: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 6

بايد به گونه ای انتخاب شود که LENطول ارايه تعيين شده •به صورت مطمئنی تمام کاراکترها را در بر گيرد

اگر طول ارايه بيشتر از تعداد کاراکترها ی متغير در نظر •گرفته شود محل های باقی مانده به صورت فضای خالی

باقی می مانداگر طول ارايه کمتر در نظر گرفته شود از سمت چپ •

شروع می گردد Title=‘professor’

معادلTitle=‘profes’

را حذف کرد و در داخل پرانتز از عدد LENمی توان کلمه •تنها استفاده کرد

( در نظر 1 استفاده نشود طول رشته )LENاگر از دستور •گرفته می شود

استفاده شود طول بر حسب طول )*(اگر به جای عدد از •واقعی ارايه تعيين خواهد شد )در توابع نه برنامه اصلی(

CHARACTER (*):: Surname=‘ahmadzadeh’

Page 7: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 7

( در يک نويسه“ ( و ) ‘استفاده از )

اگر بخواهيم عبارت زير چاپ شود:Use “==“ instead of “E.Q.” please.

دستور فرترن آن به صورت زير نوشته می شود:

Remark= “Use ” ”==“ “ instead of “ “E.Q.” “ please”

جزو ارايه است “يعنی وقتی خود عالمت بايستی دو بار پشت سر هم نوشته شود

Page 8: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 8

عملگر های منطقی در ارايه های نويسه ای

عملگرهای منطقی:•<=, <, >=, >, /=, ==

اfين عملگر ها را می توان عالوه بر کميت های عددی در مورد ارايه های غير

عددی نيز به صورت زير بکار برد:IF (String1==“sir” .AND. string2>string3) THEN

. .

. .

. .

Page 9: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 9

کاربرد متغير های نويسه ای

عملگرهای محاسباتی + ، - ،....در اين متغيرها نبايد •استفاده شوند

تنها عملگر مورد استفاده در اين نوع متغير ها عالمت // •است که جهت اتصال متغير های نويسه ای استفاده می

(همانند عمل جمعشود )• CHARACTER (len=24) :: name

• CHARACTER (len=6) :: surname

• surname = `Bloggs'

• name = `Prof `//` Mrs. /Mr. `//surname تجاوز نمايد ويا کمتر باشد 24 از nameاگر تعداد کاراکتر •

همان قاعده کلی انجام خواهد شد

Page 10: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 10

زير رشته ها در متغير های نويسه ای Substrings

از زير رشته می توان استفاده نمود تا از بخشی از ارايه •اختصاص داده شده به يک متغير غير عددی استفاده شود

فرم کلی• )start-position : end-position(

باشندINTEGERنقاط شروع و خاتمه حتماl بايد و نقطه خاتمه بايد کوچکتر يا 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).

Page 11: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 11

غير عددی )نويسه ای( توابع آماده مرتبط با متغير هایدر فرترن

تابع عمليات

LEN (string) LENمقدار طول يک متغير نويسه ای (‘Newzealand’) است10 برابر

INDEX (sub, string) محل شروع زير ارايه را دريک ارايه می دهدINDEX (‘dostee’, ‘alidostee’) است 4 برابر

CHAR (int) CHARACTER به INTEGER تبديل

ICHAR (char) INTEGER به CHARACTERتبديل

TRIM (string) معادل اندازه ارايه بدون احتساب کاراکترهای خالی

TRIM (“Four “) برابر “four”است

Page 12: نويسه و رشته  CHARACTER string

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

Page 13: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 13

مثال : برنامه ای بنویسید که متنی را

بخواند و فواصل بین کلمات را با کاراکتر دلخواهی عوض کند

program testcharacter(30)::text, newtextcharacter::sepread*,text,sepnewtext=""

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

Page 14: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 14

Cرشته ها در کاراکتر • مشخصه از فرترن شود charهمانند می استفاده

char name[10]ای • نويسه ای nameمتغfير آرايه از 10بعنوان عضوی

است ( شده تعريف ها از کاراکتر ای آرایه بصورتکاراکتر)

تهی • عالمت اسکی (nullکاراکتر کد )0\باتعداد – با ای نويسه متغير يک در که رشته يک انتهای تعيين برای

عضو بيشترchar name[10]={‘a’,’l’,’i’,’\0’}

کاراکتر • عنصر برای جا بايد رشته تعريف در nullهنگامگرفت نظر

مقدار • ذخيره متغير ahmadنحوه nameدر

a h m a d \0

Page 15: نويسه و رشته  CHARACTER string

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در با توان نمی لذا و هستند ارایه واقع در ها رشتهکرد دهی مقدار یکجا را همه انتساب دستور

Page 16: نويسه و رشته  CHARACTER string

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 HosseinHello Mohammad!

Page 17: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 17

Cدر gets تابع دستور • خالی 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!

Page 18: نويسه و رشته  CHARACTER string

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);}

Page 19: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 19

توابع کتابخانه ای برای رشته های نويسه ای Cدر

سرامد • فايل در ای رشته توابع string.hمحل) ()LEN_TRIMمشابه ( strlenتابع – فرترن در

مشخص • را آن های کاراکتر تعداد و دريافت را ای رشتهعالمت ( تا کند ) 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

Page 20: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 20

strcpyتابع string copyمخفف •

و – یافت در ترتیب به را رشته دوم دو کند رشته می کپی اولی در رااست – رشته دو دارای آن آرگومانتابع = – این از بجای ای رشته متغیر یک به ای رشته ثابت یک انتساب برای lمعموًال

شود می استفاده#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

Page 21: نويسه و رشته  CHARACTER string

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!

Page 22: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 22

strcmpتابع )string compareاز • فرترن ( در ای مقایسه های عملگر مشابهگرداند • می باز را زیر مقادیر مقایسه از پس و دریافت را رشته دو

0مساوی –بزرگتر – اول +1رشتهکوچکتر – اول -1رشته

#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);

}please enter string1 : aliplease enter string2: ahmadali is greater than ahmad

please enter string1 : aliplease enter string2: alirezaali is less than alireza

Page 23: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 23

strstrتابع تابع ( • مشابه تقریبا دریافت را رشته )INDEXدو فرترن درکند – می جستجو را دوم رشته اول، رشته درگرداند – می باز را دوم رشته در آن کاراکتر اولین مکان شدن پیدا صورت درمقدار – نباشد گرداند- 1اگر می بر راگرداند – می باز را نمونه اولین مکان هم باز تکرار صورت <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);}

}

Enter a text: this is a sample text!How many word do you have:3Enter a word to search: sample(sample is found at position 10Enter a word to search: is(is) is found at position 2Enter a word to search: test(test) not found

Page 24: نويسه و رشته  CHARACTER string

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: helloReverse of hello is olleh

Page 25: نويسه و رشته  CHARACTER string

www.um.ac.ir/~abaspour/computer 25

atoiتابع • ascii to integerاز –سرامد – فایل stdlib.hدربه + - – تبدیل گرفته را ، و اعداد از متشکل ای رشته

کند ( می صحیح به ”3478“عدد )3478را

itoaتابع •–integer to asciiرشته – به عدد تبديل

)atofتابع • اعشاری ( به رشته تبديل)atolتابع • بلند ( صحيح به رشته تبدیلبه • توابع ديگر کنید helpبرای مراجعه