صفحه 1:
«آرایه‌ها و رشته ها»

صفحه 2:
6 تعريف آرايه * يك آرايه. يك زنجيره از متغيرهايى است كه همه از يك نوع هستند. * به اين متغيرها «اعضاى آرايه» می‌گویند. * هر عضو آرايه با يك شماره مشخص مىشود كه به اين شماره «انديس» مى كويند

صفحه 3:
: تعریف آرایه (ادامه.) * عناصر یک آرایه در خانه‌های پشت سر هم در حافظه ذخیره می‌شوند. به این ترتیب آرایه را می‌توان بخشی از حافظه تصور کرد که این بخش خود به قسمت‌های مساوی تقسیم شده و هر قسمت به یک عنصر تعلق دارد.

صفحه 4:
* شكل مقابل آراية ‏ كه ينج عنصر دارد را نشان می‌دهد. * عنصر [2101 حاوی مقدار ۱۷۰.۵ و عنصر [2]1 حاوی ۱۹.۰ و عنصر [۵]4 حاوی مقدار ۱۸۰۰ است. * انديس آرایه ها از صفر شروع میشود texte ۱۷۵۰ ۱۹-۰۰ ۱۶۰۷۵ ۱۵.۰۰ ۱۸۳-۰۰

صفحه 5:
ball ‏مقداردهی‎ * در )+ می‌توانیم یک آرایه را با استفاده از فهرست مقداردهی, اعلان و مقدار گذاری کنیم: ‎;float a[] = {22.2,44.4,66.6}‏ ۳۲۳۲ rer] ١ ۶۶۶ 5

صفحه 6:
مقداردهی آرایه‌ها * به اين ترتيب مقادير داخل فهرست به همان ترتيبى که جيد شده‌اند درون عناصر آرایه قرار می‌گیرند. ‎cite‏ ره و برابر با تعداد عناصر موجود در فهرست خواهد بود. ؟پس همین خط مختصر آرايهاى از نوع :11021 و با نام وبا تعداد سه عنصر اعلان کرده و هر سه عنصر را با مقدارهای درون فهرست. مقداردهی می‌کند. 2 rey rer] 1 ۶۶۶] ۲

صفحه 7:
مثال مقداردهی آرایه با استفاده از فهرست مقداردهی برنامةً زیر آراية 3 را مقداردهی کرده و سپس مقدار هر عنصر را چاپ می‌کند: ‎void main()‏ { ‎float a[] = { 22.2, 44.4, 66.6 };‏ ‎int size = sizeof(a)/sizeof(float);‏ ‎for (int i=0; i<size; i++)‏ ‎cout << "\ta[" << i << "] =" << afi] <<‏ ‎endl;‏ ‏2 2 [2]0 } 4 - [2]1 ‎al2] = 66.6‏

صفحه 8:
ارسال آرایه به تابع

صفحه 9:
ارسال آرایه به تابعی که مجموع عناصر آرایه را برمی گرداند ‎int sum(int[],int);‏ ‎int main()‏ ‎int af] = { 11, 33, 55, 77};‏ { int size = sizeof(a)/sizeof(int); cout << "sum(a,size) = endl;} int sum(int a[], int n) << sum(a,size) << { int sum=0; for (int i=0; i<n; i++) sum += ali]; return sum;

صفحه 10:
“ارسال آرایه به تابع بصورت مرجع میباشد *هر تغييرى كه درون تابع روى آركومان ارايهاى ورودى ايجاد كردد. تغيير در مرجع اولیه اعمال میگردد.

صفحه 11:
آرایه ها به عنوان عضو داده ای کلاس * براى درك اين مفهوم از مثال پشته استفاده می کنیم * يشته ليست آخرين ورودى-اولين خروجى ميباشد.

صفحه 12:
مه > شنه + © © < 1 ۶ ۵ هاس حذف و جايگذاري عناصر در یک پشته

صفحه 13:
class stack 1 ۳ private: enum {maxitem=10}; int st[maxitem]; //s br. ‏عناصر موجود در پشته را نگه‎ int top; ‏لتنیس] خریرچنصر را ن گه میدارد//‎ public: stack() {top=-1;} void push(int var) { st[++top]=var; } int pop() { return st[top--];} 1

صفحه 14:
void main() { stack s1; sl.push(11); sl.push(22); s1.push(33); sl.push(44); “<<sl.pop()<<endl; “<<sl.pop()<<endl; “<<s1.pop()<<endl; “<<sl.pop()<<endl; cout<<“1: cout<<“2: cout<<“3: ‏انام‎ > > “4:

صفحه 15:
* خروجی حاصل از مثال قبل به صورت زیر خواهد بود: سر ی نیا بح ‎N‏ ‎N‏ همان طور که ملاحظه می کنید عضو ها بصورت عکس .از پشته برداشته می شوند

صفحه 16:
نکته: می توان آرایه ای از اشیاء هم ایجاد کرد: stack s[100];

صفحه 17:
صف ؟ صف یک لیستی از عناصر است ؟ویژگی صف این است که هر عنصر جدید به انتهای لیست اضافه میشود و عملیات حذف از صف از ابتدای صف انجام ميشود.

صفحه 18:
؟ ,۸.2 رابه ترتیب اضافه می کنیم در حالی که 4 اولين عنصری است که حذف می شود «| rear « rear reare | C rear 0 + ۲۵۵۲ | ‏و‎ 8 c c A A A B B ADDA ADDB ADD C DELETE ADDD

صفحه 19:
۷ ‏تمرین‎ ee ۱۰ ‏؟ یک صف برای نگهداری اعداد صحیح تعریف نمایید و‎ عدد را از کاربر گرفته و در صف قرار دهید سپس یکی یکی عناصر را از صف خارج و در خروجی نمایش دهید. »براى ‎poly‏ سازی از فرمها در ۷2 استفاده نمایید.

صفحه 20:
رشته ها در زبان ‎aC‏ ؟ داده‌هایی که در رایانه‌ها پردازش می‌شوند هميشه عدد نیستند. معمولا لازم است که اطلاعات کاراکتری مثل نام افراد - نشانی‌ها - متون - توضیحات - کلمات و ... نیز پردازش گردند. جستجو شوند. مقایسه شوند. به یکدیگر الصاق شوند يا از هم تفکیک گردند. * در این مبحث بررسی می‌کنیم که چطور اطلاعات کاراکتری را از ورودی دریافت کنیم و پا آن‌ها را به شکل دلخواه به خروجی بفرستیم. . در همین راستا توابعی معرفی می‌کنیم که انجام اين کارها را آسان می‌کنند.

صفحه 21:
رشته‌های کاراکتری در ن * در زبان /)++ یک «رشتةّ کاراکتری» آرایه‌ای از کاراکترهاست که اين آرایه دارای ویژگی مهم زیر است: © ۱-یک بخش اضافی در انتهای آرایه وجود دارد که مقدار آن. کاراکتر ,]1 یعنی ۰۱" است. پس تعداد کل کاراکترها در آرایه هميشه یکی بیشتر از طول رشته است. * ۲- رشتةٌ کاراکتری را می‌توان با لیترال رشته‌ای به طور مستقیم مقدار گذاری کرد مثل: © char str[] = "string"; ‏توجه کنید که این آرایه هفت عنصر دارد:‎ * و

صفحه 22:
83 رشته‌های کاراکتری در ‎(abst) C‏ *؟- کل یک رشتةً کاراکتری را می‌توان مثل يك متغير معمولی چاپ کرد. مثل: ‎cout << str;‏ * ۴ در این صورت. همه کاراکترهای درون رشتة كاراكترى ‎SEP‏ ‏یکی یکی به خروجی می‌روند تا وقتی که به کاراکتر انتهایی ‎NULL‏ برخورد شود.

صفحه 23:
رشته‌های کاراکتری در ‎(abst) C‏ © - يك رشتة كاراكترى را مىتوان مثل يك متغير معمولی از ورودى دريافت كرد مثل: 51 << ررزه » * در اين صورت,. همة كاراكترهاى وارد شده يكى يكى درون 51:1 جاى مى كيرند تا وقتى كه به يى فضاى خالى در كاراكترهاى ويودى برخورد شود. برنامهنويس بايد مطمئن باشد كه آراية 57 برای دریافت همه کاراکترهای وارد شده جا دارد.

صفحه 24:
2 ‏دیگر توابع رشته‌های کاراکتری در‎ SS * ۵- توابع تعریف شده در سرفایل <57100.12> را می‌توانیم برای دست‌کاری رشته‌های کاراکتری به کار بگیریم. اين توابع عبارتند از: © تابع طول رشته 0517161 * توابع کپی رشته 51700۷ و 005112027 * توابع الصاق رشته‌ها تاو و ‎Qstrncat‏ ؟ توابع مقايسةّ رشته‌ها 05701500 و تاک( * توابع جستجوی زیر رشته در یک رشته تأ5و)

صفحه 25:
ورودی /خروجی رشته‌های کاراکتری: * در ن6++به چند روش می‌توان رشته‌های کاراکتری را دریافت کرده یا نمایش داد. * یک راه استفاده از عملگرهای کلاس 51711167 است که در بخش‌های بعدی به آن خواهیم پرداخت. * روش دیگر. استفاده از توابع کمکی است که آن را در ادامه شرح می‌دهیم.

صفحه 26:
مثال :«روش سادةٌ دریافت و نمایش رشته‌های کاراکتری: در برنامة زیر یک ‎Gd,‏ کاراکتری به طول ‎۷٩‏ کاراکتر اعلان شده و کلماتی که از ورودی خوانده می‌شود در آن رشته قرار می‌گیرد: (jist scr ‘char word[OO] } ۲ woout<< “Cater Gtricry jo>>Lword joout<<“O eatered.”<<word<<eerd 0 انار t

صفحه 27:
*؟ در برنامه قبل و برای نمایش اطلاعات ذخیره شده یک مشکل خواهیم داست: ؟اگر یک جمله با تعدادی کلمات نوشته شود در خروجی فقط * كلمه اول جا ب مى شود. * دليل اين مشكل اين است كه عملكر > > كاراكتر فضاى خالى را به عنوان كاراكتر انتهاى رشته در نظر مى كيرد. * براى رفع اين مشكل جه بايد كرد؟ ۰

صفحه 28:
* براى خواندن یک رشته با فضای خالی از تابع 0110.06 ویا 011.06111116 استفاده می کنیم: ‎wu‏ ا ‎whur word[OO] }‏ ‎wot<< “Cater Stag‏ ۲ (6©00,لمصي)اي. داور الجج>كلسورر> > ”:لجسومج () تكك ليوز 00 مار ‎1 ‏آركومان اول اين تابع آدرس آرايه است كه در آن رشته خوانده ‎de.‏ قرار مى كيرد ‎ ‎ ‎ ‎

صفحه 29:
® آر گومان دوم اين تابع حد اکثر طول آرایه را مشخص * مى کند.این عمل با عث می شود به طور اتوما تیک از سر ریزی بافر جلو گیری می کند. : << با استفاده از اپرا تور Enter a string: my name is Spiderking U entered: my با استفاده از ‎Enter a string: my nam@fen-gset‏ ‎Spiderking‏ ‎U entered: my name is Spiderking‏

صفحه 30:
5 | با دو پارامتر 0011.0611106 تابع این برنامه ورودی را خط به خط به خروجی می‌فرستد: ‎void main()‏ ‎char line[80];‏ { ‎do‏ ‎cin.getline(line,80);‏ { ‎if (*line) cout << "\t[" << line << "]\n";‏ ‎while (*line);‏ } 1

صفحه 31:
:| باسه بارامتر 75.9 () تابع :برنامه زير» متن ورودى را جند خط هم كه باشد مى خواند void main() { char str[2000]; cout<<"enter string:\n"; cin.get(str,2000,'$'); cout<<str; getch();

صفحه 32:
توایع کاراکتری ) استاندارد * توابعى كه در سرفايل ‎<cctype> b <ctype.h>‏ تعريف شده به شرح زير است: eG eb Oisalnum Qisalpha شرح ‎jint isalnum(int c)‏ اگر > کاراکتر الفبلییبا عددی باشد مقدار غیرصفر وگینه صفر را برمی گرداند ‎jint isalpha(int c)‏ اكر ع كاراكتر الفبليى باشد مقدار غيرصفر و در غير آنن» صفر را برم ی گرداند

صفحه 33:
نام تابع QOiscntrl Qisdigit Qisgraph QOislower Qisprint شرح ‎jint iscntrl(int c)‏ اگر 6 کاراکتر کنتیلی باشد مقدار غیرصفر و در غیر ن. صفر را برمی گرداند jint isdigit(int c) اگر » کاراکتر عددی باشد. مقدار غیرصفر و در غیر لن. صفر را برمی گرداند 101 isgraph(int c) اگر © كاراكتر حليى و غير خللى باشد مقدار غیرصفر و گرنه صفر را برمی گرداند jint islower(int c) اگر ‎CC‏ حرف کوچک باشد مقدار غیرصفر و در غیر آن. صفر را برمی گرداند jint isprint(int c) اكر © كاراكتر قلبل چاپ باشد مقدار غیرصفر و در غیر ‎col‏ ‏صفر را برمی گرداند

صفحه 34:
نام تاب Qispunct Qisspace Qisupper QOisxdigit Otolower Qtoupper jint ispunct(int c) اكر © كاراكتر جابى به غير از حروف و اعداد و فضاى خالى باشد. مقدار غیرصفر پر كردائف وكرقه مقدار ضفر را يزمى گردائد jint isspace(int c) اگر 6 كاراكتر فضاى سفيد شامل فضاى خللى ' ' عبور فرم ۴۱۳" و خط جدید ۳ و بازگشت نورد ۲۳۱۳ و پرش افقی 6۱۳" و پرش عمودی ۲۷۱۳ باشد. مقدار غیرصفر را برمی گرداند وگرنه صفر را پرمی گرداند jint isupper(int c) ‏اگر 6 حرف بزرگ باشد. مقدار غیرصفربرمیگرداند وگرنه صفر را برمى كردائد‎ jint isxdigit(int c) 2 ‏اگر > یکی از ده کاراکتر عددی یا یکی از دوازده حرف عدد‎ ۳ ee ee Eee ‏باشد.مقدارغبرصفر بمیگرداند وكرنه مقدار صفر را برمى كردائد‎ ٩ zint tolower(int c) اگر > حرف بزرگ باشد. کاراکتر کوچک معادل ن را برمی‌گرداند وگرنه خود 6 را برمی گرداند jint toupper(int c) اگر 6 حرف کوچک باشد. کاراکتر بزرگ معادل ‎dd‏ را پرمی‌گرداند وگرشه خود 6 را برمی گرداند

صفحه 35:
نوع 5131126 در ++ 0 استاندارد ee * در 7)++ استاندارد نوع داده‌ای خاصی به نام 571110 وجود دارد که مشخصات این نوع در سرفایل <0.11 5117111 > تعریف شده است. برای آشنایی با اين نوع جدید. از طريقة اعلان و مقداردهی آن شروع می‌کنیم. اشیایی که از نوع )5177111 هستند به چند طریق می‌توانند اعلان و مقداردهی شوند: ‎O characters‏ جمدكمص )5 // 50 ماصع ‎Il sO vooins UP characters‏ :"وده (1) ‎“GSkoked‏ = 6و رد ‎siriagy 5O(OO, ™'); Il s9 poutine OO stars‏ ‎sis‏ 90 موی ‎sO; I s®‏ = و ره

صفحه 36:
دیگر توابع كلاس ‎string‏ ‏9 =+ $3 * دو رشته را به هم متصل می کند ‎;sl.swap(s2) *‏ © مقدار دو شیی را عوض می کند ‎;s4.concat(s1) ®‏ © 1 به لنتهای94 لضافه می‌شود ‎“spiderking ۶‏ + 91« © نوشته ثابت را به انتهای 51 اضافه میکند.

صفحه 37:
*حتی می توان رشته ها را با هم مقایسه کرد: if (sl==s2) ® ;while(s1<s3) ® sif(s1>s2) ® *اگر این كلاس مهم وجود نداشت می بایست برنامه ای به صورت زیر نوشت تا بتوان دو رشته را مقایسه کرد که وقت كير مى باشد و مقرون به صرفه نیست

صفحه 38:
‎oo‏ چند تمرین و برنامه ساده با رشته‌ها ‏* برنامه ‎:١‏ با استفاده از كلاس 5111110 برنامه ای بنویسید که يك رشته رااز كاربر كرفته و آنرا نمايش دهد.

صفحه 39:
#include "conio.h" include <string> #include <iostream sing namespac int main(int argc, char* argv[]) { string ms; cout<<"Enter your name:"; cin>>ms; cout<<"\nYou entered:"<<ms; getch(); return 0;

صفحه 40:
چند تمرین و برنامه ساده با رشته‌ها برنامه ۲: برنامه ای بنویسید که یک رشته را از کاربر گرفته و طول آنرا به کاربر نمایش دهد. رشته ورودی با کلمه 7 مقایسه شده و درصورت مساوی بودن پیام مناسب داده شود.

صفحه 41:
int main(int argc, char* argv[]) { string ms; cout<<"Enter your name: cin>>ms; cout<<"\nYou entered:"<<ms; cout<<"\nLength:"<<ms.length(); if(ms.compare(" Programmer ")==0) cout<<"\nYour name is Equal to \"Programmer \""; else cout<<"\nYour name is not Equal to \"Programmer \""; getch(); return 0;

صفحه 42:
تمرین ۸ *؟ ۸-۱-برنامه ای بنویسید که نام دانشجوپان و شماره دانشجویی اعضا یک کلاس حداکثر ۵۰ نفره را از کاربر گرفته و پس از مرتب سازى ليست براساس نام دانشجو, اسامی را نمایش دهد. * برنامه بايد بتواند اطلاعات را درون فایل ذخیره نماید و از فایل بازیابی کند. * برای نوشتن برنامه یک کلاس دانشجو تعریف و آرایه ای بطول ۵۰ تعریف نمایید. نام دانشجو از نوع 511110 باشد. * برای مرتب سازی لیست از الگوریتم مر تب‌سازی حبابی استفاده کنید برنامه را با استفاده از فرمها پیاده سازی نمایید بدین شکل که روی فرم اصلى برنامه يك ‎JIS ListBox‏ میدهید و با زدن یک دکمه دیالوگ جدید ظاهر میشود که نام یک دانشجوی جدید را میگیرد و در نهایت لیست دانشجویان روی لیست فرم اصلی برنامه نمایش داده ميشود. ؟ در این مورد استفاده از فایل متنی ساده تر میباشد.

صفحه 43:
۸ ‏ادامه تمرین‎ se ؟ ۸-۲- برنامه ای بنویسید که یک کلمه را در فایل با کلمه دیگری جایگزین نماید. ورودی برنامه: - اسم فایل - کلمه مورد نظر- کلمه جایگزین میباشد. * ۸-۳برنامه ای بنویسید که یک عدد صحیح از کاربر گرفته و آنرا بخواند. مثلا با ورود ۱۳۴ خروجی صد و سی و چهار و یا یکصد و سی و چهار را تولید نماید

«آرايهها و رشته ها» ‌ تعريف آرايه يک آرايه ،يك زنجيره از متغيرهايي است كه همه از يك نوع هستند. به اين متغيرها «اعضاي آرايه» مي‌گويند. هر عضو آرايه با يک شماره مشخص مي‌شود که به اين شماره «انديس» مي‌گويند تعريف آرايه (ادامه).. عناصر يک آرايه در خانه‌هاي پشت سر هم در حافظه ذخيره مي‌شوند .به اين ترتيب آرايه را مي‌توان بخشي از حافظه تصور کرد که اين بخش خود به قسمت‌هاي مساوي تقسيم شده و هر قسمت به يک عنصر تعلق دارد. شکل مقابل آرايۀ aکه پنج عنصر دارد را نشان مي‌دهد. عنصر ] a[0حاوي مقدار 17.5و عنصر ] a[1حاوي 19.0و عنصر ] a[4حاوي مقدار 18.0است. انديس آرايه ها از صفر شروع ميشود 0 1 2 3 4 17.50 19.00 16.75 15.00 18.00 مقداردهي آرايه‌ها در ++Cمي‌توانيم يک آرايه را با استفاده از فهرست مقSSداردهي، اعالن و مقدارگذاري کنيم: };float a[] = {22.2,44.4,66.6 ‏a 0 22.2 2 66.6 1 44.4 مقداردهي آرايه‌ها به اين ترتيب مقادير داخل فهرست به همان ترتيبي که چيSSده شده‌اند درون عناصر آرايه قرار مي‌گيرنSSد .انSSدازه آرايSSه نSSيز برابر با تعداد عناصر موجود در فهرست خواهد بود. پس همين خط مختصر ،آرايه‌اي از نوع floatو با نام aو با تعداد سه عنصر اعالن کرده و هر سSSSه عنصر را با مقSSSدارهاي درون فهرست ،مقداردهي مي‌کند. ‏a 0 22.2 2 66.6 1 44.4 ل مقداردهي آرايه با اسSSتفاده از فهرسSSت مقSSداردهي برنامSSۀ مثا ‌ زير ،آرايۀ aرا مقداردهي کرده و سپس مقدار هر عنصر را چاپ مي‌كند: )(void main { ;} float a[] = { 22.2, 44.4, 66.6 ;)int size = sizeof(a)/sizeof(float )for (int i=0; i<size; i++ << ]cout << "\ta[" << i << "] = " << a[i ;endl ‏a[0] = 22.2 ‏a[1] = 44.4 ‏a[2] = 66.6 } ارسال آرايه به تابع‌ ارسال آرايه به تابعي كه مجموع عناصر آرايه را برمي‌گرداند int sum(int[],int); int main() { int a[] = { 11, 33, 55, 77 }; int size = sizeof(a)/sizeof(int); cout << "sum(a,size) = " << sum(a,size) << endl;} int sum(int a[], int n) { int sum=0; for (int i=0; i<n; i++) sum += a[i]; return sum; ارسال آرايه به تابع بصورت مرجع ميباشد ‏هر تغييري كه درون تابع روي آرگومان آرايه‌اي ورودي ايجادگردد ،تغيير در مرجع اوليه اعمال ميگردد. آرایه ها به عنوان عضو داده ای کالس برای درک این مفهوم از مثال پشته استفاده می کنیم پشته ليست آخرين ورودي-اولين خروجي ميباشد. پشته ←top ‏C ‏B ‏A ← ‏top ‏D ‏C ‏B ‏A ← ‏top ‏C ‏B ‏A ← ‏top ‏B ‏A حذف و جايگذاري عناصر در يک پشته ← ‏top ‏A class stack { private: enum {maxitem=10}; int st[maxitem]; //عناصر موجود در پشته را نگه ميدارد int top; //انديس آخرين عنصر را نگه ميدارد public: stack() {top=-1;} void push(int var) { st[++top]=var; } int pop() { return st[top--];} }; void main() { stack s1; s1.push(11); s1.push(22); s1.push(33); s1.push(44); cout<<“1: “<<s1.pop()<<endl; cout<<“2: “<<s1.pop()<<endl; cout<<“3: “<<s1.pop()<<endl; cout<<“4: “<<s1.pop()<<endl; } خروجی حاصل از مثال قبل به صورت زیر خواهد بود: 44 33 22 11 1: 2: 3: 2: همان طور که مالحظه می کنید عضو ها بصورت عکس .از پشته برداشته می شوند نکته :می توان آرایه ای از اشیاء هم ایجاد کرد: ;]stack s[100 صف صف يك ليستي از عناصر است ويژگي صف اين است كه هر عنصر جديد به انتهاي ليست اضافه ميشود و عمليات حذف از صف از ابتداي صف انجام ميشود. صف اولينA را به ترتيب اضافه مي کنيم در حالي کهA،B،C،D  عنصري است که حذف مي شود ← rear ← rear rear ← ← rear A ADD A C ← rear D B B C C A A B B ADD C DELETE ADD D ADD B تمرين 7 يك صف براي نگهداري اعداد صحيح تعريف نماييد و 10 عدد را از كاربر گرفته و در صف قرار دهيد سپس يكي يكي عناصر را از صف خارج و در خروجي نمايش دهيد. براي پياده سازي از فرمها در VCاستفاده نماييد. رشته ها در زبان ++C داده‌هايي که در رايانه‌ها پSSردازش مي‌شSSوند هميشSSه عSSدد نيستند .معموال الزم است که اطالعات کاراکتري مثل نSSSام افراد – نشاني‌ها – متSSون – توضSSيحات – کلمات و ...نSSيز پSSردازش گردند ،جستجو شوند ،مقايسه شوند ،به يکديگر الصاق شSSSوند يا از هم‌ تفکيک گردند. در اين مبحث بررسي مي‌کنيم که چطور اطالعات کاراکتري را از ورودي دريافت کنيم و يا آن‌ها را بSSه شSSکل دلخSSواه بSSه خروجي بفرستيم .در همين راستا توابعي معرفي مي‌کنيم که انجام اين کارها را آسان مي‌کنند. رشته‌هاي كاراكتري در C در زبان ++Cيك «رشتۀ کاراکتري» آرايه‌اي از کاراکترهاست که اين آرايه داراي ويژگي مهم زير است: ‏ ي در انتهاي آرايه وجود دارد که مقدار آن ،کاراکتر NULL ش اضاف ‌ ك بخ ‌ -1ي ‌ يعني '\ ‘0است .پس تعداد کل کاراکترها در آرايه هميشه يکي بيشتر از طول رشته است. -2رشتۀ کاراکتري را مي‌توان با ليترال رشته‌اي به طور مستقيم مقدارگذاري کرد مثل: ‏ ن آراي ‌ه هفت‌ عنصر دارد: توج ‌ه كنيد كه‌ اي ‌ 'و '\ 'g' 0و ' 'nو ' 'iو ' 'rو ' 'tو ''s ‏ ;"char str[] = "string ‏ ‏ رشته‌هاي كاراكتري در ( Cادامه).. -3 کل يک رشتۀ کاراکتري را مي‌توان مثل يک متغير معمولي چاپ کرد .مثل: ; cout << str در اين صورت ،همۀ کاراکترهاي درون رشتۀ کاراکتري str يکي يکي به خروجي مي‌روند تا وقتي که به کاراکتر انتهايي NULLبرخورد شود. رشته‌هاي كاراكتري در ( Cادامه).. -4 يک رشتۀ کاراکتري را مي‌توان مثل يک متغير معمولي از ورودي دريافت کرد مثل: ; cin >> str در اين صورت ،همۀ کاراکترهاي وارد شده يکي يکي درون str جاي مي‌گيرند تا وقتي که به يک فضاي خالي در کاراکترهاي ورودي برخورد شود .برنامه‌نويس بايد مطمئن باشد که آرايۀ str براي دريافت همۀ کاراکترهاي وارد شده جا دارد. ديگر توابع رشته‌هاي كاراكتري در C -5 توابع تعريف شده در سرفايل < >string.hرا مي‌توانيم براي دست‌کاري رشته‌هاي کاراکتري به کار بگيريم .اين توابع عبارتند از: تابع طول رشته )(strlen توابع کپي رشته )(strcpyو )(strncpy توابع الصاق رشته‌ها )(strcatو )(strncat توابع مقايسۀ رشته‌ها )(strcmpو )(strncmp توابع جستجوي زير رشته در يك رشته )(strstr ورودي‌/خروجي رشته‌هاي کاراکتري: در ++Cبه چند روش مي‌توان رشته‌هاي کاراکتري را دريافت کرده يا نمايش داد. يک راه استفاده از عملگرهاي کالس stringاست که در بخش‌هاي بعدي به آن خواهيم پرداخت. روش ديگر ،استفاده از توابع کمکي است که آن را در ادامه شرح مي‌دهيم. مثال‌ :روش سادۀ دريافت و نمايش رشته‌هاي کاراکتري: در برنامۀ زير يک رشتۀ کاراکتري به طول 79کاراکتر اعالن شSSده و کلماتي که از ورودي خوانده مي‌شود در آن رشته قرار مي‌گيرد: )(int main { ];char word[80 ;” :cout<< “Enter String ;cin>>word ;cout<<“U entered:”<<word<<endl ;return 0 } در برنامه قبل و برای نمایش اطالعات ذخیره شده یک مشکل خواهیم داست: اگر یک جمله با تعدادی کلمات نوشته شود در خروجی فقط کلمه اول چا پ می شود. دلیل این مشکل این است که عملگر >> کاراکتر فضای خالی را به عنوان کاراکتر انتهای رشته در نظر می گیرد. برای رفع این مشکل چه باید کرد؟ ؟ برای خواندن یک رشته با فضای خالی از تابع cin.getويا cin.getlineاستفاده می کنیم: )(int main { ];char word[80 ;” :cout<< “Enter String );cin.get(word,80 ;cout<<“U entered:”<<word<<endl ;return 0 } آرگومان اول این تابع آدرس آرایه است که در آن رشته خوانده .شده قرار می گیرد آرگومان دوم این تابع حد اکثر طول آرایه را مشخص می کند.این عمل با عث می شود به طور اتوما تیک از سر ریزی بافر جلو گیری می کند. >> :با استفاده از اپرا تور ‏Enter a string: my name is ‏Spiderking ‏U entered: my با استفاده از )(cin.get ‏Enter a string: my name is ‏Spiderking ‏U entered: my name is Spiderking () تابعcin.getline ‌با دو پارامتر :ي را خط به‌ خط به خروجي مي‌فرستد ‌ ن برنام ‌ه ورود ‌ اي void main() { char line[80]; do { cin.getline(line,80); if (*line) cout << "\t[" << line << "]\n"; } while (*line); } () تابعcin.get با سه پارامتر متن ورودي را چند خط هم که باشد می خواند،برنامه زير: void main() { char str[2000]; cout<<"enter string:\n"; cin.get(str,2000,'$'); cout<<str; getch(); } توابع‌ كاراكتري‌ Cاستاندارد توابعي که در سرفايل < >ctype.hيا <>cctype تعريف شده به شرح زير است: نام تابع شرح )(isalnum );int isalnum(int c +فر را +ه ص+ اگر cکاراکتر الفبايي يا عددي باشد مقدار غيرصفر وگرن+ برمي‌گرداند )(isalpha );int isalpha(int c +فر را +ير آن ،ص+ +فر و در غ+ اگر cکاراکتر الفبايي باشد مقدار غيرص+ برمي‌گرداند نام تابع )(iscntrl شرح );int iscntrl(int c اگر cکاراکتر کنترلي باشد مقدار غيرصفر و در غير آن ،صفر را برمي‌گرداند )(isdigit );int isdigit(int c اگر cکاراکتر عددي باشد ،مقدار غيرصفر و در غير آن ،صفر را برمي‌گرداند )(isgraph );int isgraph(int c اگر cکاراکتر چاپي و غيرخالي باشد مقدار غيرصفر وگرن ه صفر را برمي‌گرداند )(islower )(isprint );int islower(int c اگر cحرف کوچک باشد مقدار غيرصفر و در غير آن ،ص فر را برمي‌گرداند );int isprint(int c اگر cکاراکتر قابل چاپ باشد مقدار غيرصفر و در غ ير آن، صفر را برمي‌گرداند نام تابع )(ispunct شرح );int ispunct(int c اگر cکاراکتر چاپي به غير از حروف و اعداد و فض اي خ الي باش د ،مق دار غيرص فر برمي‌گرداند وگرنه مقدار صفر را برمي‌گرداند )(isspace );int isspace(int c اگر cکاراکتر فضاي سفيد شامل فضاي خالي ' ' و عبور فرم '\ 'fو خ ط جدي د '\ 'nو بازگشت نورد '\ 'rو پرش افقي '\ 'tو پ رش عم ودي '\ 'vباش د، مقدار غيرصفر را برمي‌گرداند وگرنه صفر را برمي‌گرداند )(isupper );int isupper(int c اگر cحرف بزرگ باشد ،مقدار غيرصفر برمي‌گرداند وگرنه صفر را برمي‌گرداند )(isxdigit );int isxdigit(int c اگر cيکي از ده کاراکتر عددي يا يکي از دوازده حرف عدد شانزده‌دهي ش امل ' 'aو ' 'bو ' 'cو ' 'dو ' 'eو ' 'fو ' 'Aو ' 'Bو ' 'Cو ' 'Dو ' 'Eو ' 'Fباشد ،مقدار غيرصفر برمي‌گرداند وگرنه مقدار صفر را برمي‌گرداند )(tolower );int tolower(int c اگر cحرف بزرگ باشد ،کاراکتر کوچک معادل آن را برمي‌گردان د وگرن ه خ ود cرا برمي‌گرداند )(toupper );int toupper(int c اگر cحرف کوچک باشد ،کاراکتر بزرگ معادل آن را برمي‌گردان د وگرن ه خ ود cرا برمي‌گرداند نوع‌ stringدر C ++استاندارد در ++Cاستاندارد نوع داده‌اي خاصي به نام stringوجود دارد که مشخصات اين نوع در سرفايل < >string.hتعريف شده است .براي آشنايي با اين نوع جديد ،از طريقۀ اعالن و مقداردهي آن شروع مي‌کنيم .اشيايي که از نوع stringهستند به چند طريق مي‌توانند اعالن و مقداردهي شوند: ;string s1 // s1 contains 0 characters ;"string s2 = “Shahed University // s2 contains 17 characters ;)'*' string s3(60, // s3 contains 60 stars ;string s4 = s3 // s4 contains 60 stars ديگر توابع كالس string ‏ ;s3 += s2 دو رشته را به هم متصل می کند ‏ );s1.swap(s2 مقدار دو شیئ را عوض می کند ‏ );s4.concat(s1 s1به انتهای s4اضافه می شود ‏ ”s1 + “spiderking نوشته ثابت را به انتهای s1اضافه میکند. ‏ ‏ ‏ ‏ حتی می توان رشته ها را با هم مقایسه کرد: ;if (s1==s2)  ;while(s1<s3)  ;if(s1>s2)  اگر این کالس مهم وجود نداشت می بایست برنامه ای به صورت زیر نوشت تا بتوان دو رشته را مقایسه کرد که وقت گیر می باشد و مقرون به صرفه نیست چند تمرين و برنامه ساده با رشته‌ها برنامه :1با استفاده از كالس stringبرنامه اي بنويسيد كه يك رشته را از كاربر گرفته و آنرا نمايش دهد. #include "conio.h" #include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string ms; cout<<"Enter your name:"; cin>>ms; cout<<"\nYou entered:"<<ms; getch(); return 0; } چند تمرين و برنامه ساده با رشته‌ها برنامه : 2برنامه اي بنويسيد كه يك رشته را از كاربر گرفته و طول آنرا به كاربر نمايش دهد .رشته ورودي با كلمه “ ”Programmerمقايسه شده و درصورت مساوي بودن پيام مناسب داده شود. int main(int argc, char* argv[]) { string ms; cout<<"Enter your name:"; cin>>ms; cout<<"\nYou entered:"<<ms; cout<<"\nLength:"<<ms.length(); if(ms.compare(" Programmer ")==0) cout<<"\nYour name is Equal to \"Programmer \""; else cout<<"\nYour name is not Equal to \"Programmer \""; getch(); return 0; } تمرين 8 ‏ -8-1برنامه اي بنويسيد كه نام دانشجويان و شماره دانشجویی اعضا يك كالس حداكثر 50نفره را از كاربر گرفته و پس از مرتب سازي ليست براساس نام دانشجو ،اسامي را نمايش دهد. برنامه باید بتواند اطالعات را درون فایل ذخیره نماید و از فایل بازیابی کند. ‏ براي نوشتن برنامه يك کالس دانشجو تعریف و آرايه ای بطول 50تعريف نماييد .نام دانشجو از نوع stringباشد. براي مرتب سازي ليست از الگوريتم مرتب‌سازي حبابي استفاده كنيد برنامه را ميتوانيد با استفاده از فرمها پياده سازي نماييد بدين شكل كه روي فرم اصلي برنامه يك ListBoxقرار ميدهيد و با زدن يك دكمه ديالوگ جديد ظاهر ميشود كه نام يك دانشجوي جديد را ميگيرد و در نهايت ليست دانشجويان روي ليست فرم اصلي برنامه نمايش داده ميشود. در این مورد استفاده از فایل متنی ساده تر میباشد. ‏ ‏ ‏ ‏ ادامه تمرین 8 -8-2 برنامه ای بنویسید که یک کلمه را در فایل با کلمه دیگری جایگزین نماید .ورودی برنامه - :اسم فایل – کلمه مورد نظر -کلمه جایگزین میباشد. -8-3 برنامه ای بنویسید که یک عدد صحیح از کاربر گرفته و آنرا بخواند .مثال با ورود 134خروجی صد و سی و چهار و یا یکصد و سی و چهار را تولید نماید

51,000 تومان