نويسه و رشته character string
DESCRIPTION
نويسه و رشته CHARACTER string. رشته عبارتست از توالی از صفر يا چند کاراکتر مثل Ali برای ذخيره مواردی مثل اسم و آدرس و غيره استفاده می شوند ثابت نويسه ای: رشته صريحی از نويسه ها است (با نوشته ای که بعد از علامت “!” در فرترن و // در C می ايد متفاوت است) مثال: “Salaam” - PowerPoint PPT PresentationTRANSCRIPT
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 نتيجه چاپ به صورت:
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
استفاده می کنند و ‘ ‘بعضی از کامپايلر ها به جای “ “ از •بعضی هر دو را قبول دارند
• "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
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می توان کلمه •تنها استفاده کرد
( در نظر 1 استفاده نشود طول رشته )LENاگر از دستور •گرفته می شود
استفاده شود طول بر حسب طول )*(اگر به جای عدد از •واقعی ارايه تعيين خواهد شد )در توابع نه برنامه اصلی(
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
عملگر های منطقی در ارايه های نويسه ای
عملگرهای منطقی:•<=, <, >=, >, /=, ==
اfين عملگر ها را می توان عالوه بر کميت های عددی در مورد ارايه های غير
عددی نيز به صورت زير بکار برد: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 تجاوز نمايد ويا کمتر باشد 24 از nameاگر تعداد کاراکتر •
همان قاعده کلی انجام خواهد شد
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).
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”است
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 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
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
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 HosseinHello Mohammad!
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!
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محل) ()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
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
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!
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
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
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
www.um.ac.ir/~abaspour/computer 25
atoiتابع • ascii to integerاز –سرامد – فایل stdlib.hدربه + - – تبدیل گرفته را ، و اعداد از متشکل ای رشته
کند ( می صحیح به ”3478“عدد )3478را
itoaتابع •–integer to asciiرشته – به عدد تبديل
)atofتابع • اعشاری ( به رشته تبديل)atolتابع • بلند ( صحيح به رشته تبدیلبه • توابع ديگر کنید helpبرای مراجعه