سه شنبه 3 اسفند 1395 - 24 جمادي الاول 1438 - 21 فوريه 2017
انتظار می رود پس از پایان این گام بتوانید: - رشته‌های کاراکتری به سبک C استاندارد را ایجاد نمایید. نوع string را شناخته و رشته‌هایی از این نوع ایجاد کنید و با استفاده از توابع خاص، این رشته‌ها را دست‌کاری نمایید....
عکس نویسنده
عکس نویسنده
بازدید :
زمان تقریبی مطالعه :

گام یازدهم در برنامه نویسی ++C 

ایران در مسابقات جهانی برنامه‎نویسی

اهداف کلی:   

رشته های كاراكتری و فایل ها در ++C استاندارد

 

اهداف رفتاری و عمکردی:

انتظار می‌رود پس از پایان این گام بتوانید:
- رشته‌های کاراکتری به سبک C استاندارد را ایجاد نمایید. نوع string را شناخته و رشته‌هایی از این نوع ایجاد کنید و با استفاده از توابع خاص، این رشته‌ها را دست‌کاری نمایید. اطلاعات کاراکتری و رشته‌ای را در یک فایل متنی نوشته یا از آن بخوانید.

 

سرفصل های تئوری:

رشته‌های كاراكتری در C
ورودی‌/خروجی رشته‌های کاراکتری
چند تابع‌ عضو cin و cout
توابع‌ كاراكتری‌ C استاندارد
آرایه‌ای از رشته‌ها
توابع استاندارد رشته‌های کاراکتری
رشته‌های کاراکتری در C++  استاندارد
فایل‌ها


سرفصل های عملی:

-حل مثال از رشته
-نمونه تمرین از فایل
-حل مثال هایی از پرکردن فایل


مواد و تجهیزات لازم برای گام:

داده هایی که در رایانه ها پردازش میشوند همیشه عدد نیستند. معمولا لازم است که اطلاعات کاراکتری مثل نام افراد – نشانی ها – متون – توضیحات – کلمات و ... نیز پردازش گردند، جستجو شوند، مقایسه شوند، به یکدیگر الصاق شوند یا از هم تفکیک گردند.
در این گام بررسی می کنیم که چطور اطلاعات کاراکتری را از ورودی دریافت کنیم و یا آنها را به شکل دلخواه به خروجی بفرستیم. در همین راستا توابعی معرفی می کنیم که انجام این کارها را آسان می کنند.


در زبان  C++  یك «رشته ی کاراکتری» آرایه های از کاراکترهاست که این آرایه دارای ویژگی مهم زیر است:
1- یك بخش اضافی در انتهای آرایه وجود دارد که مقدار آن، کاراکتر NUL یعنی '\0‘  است. پس تعداد کل کاراکترها در آرایه همیشه یکی بیشتر از طول رشته است.


2 – رشته ی کاراکتری را میتوان با لیترال رشته های به طور مستقیم مقدارگذاری کرد مثل:

char str[] = "string";

توجه كنید كه این آرایه هفت عنصر دارد:

 's' و 't' و 'r' و 'i' و 'n' و 'g' و '\0'

3 –کل یک رشته ی کاراکتری را می توان مثل یک متغیر معمولی چاپ کرد. مثل:

cout << str;

در این صورت، همه ی کاراکترهای درون رشته ی کاراکتری str یکی یکی به خروجی می روند تا وقتی که به کاراکتر انتهایی NUL برخورد شود.
4 – یک رشته ی کاراکتری را می توان مثل یک متغیر معمولی از ورودی دریافت کرد مثل: 

cin >> str;

در این صورت، همه ی کاراکترهای وارد شده یکی یکی درون str جای می گیرند تا وقتی که به یک فضای خالی در کاراکترهای ورودی برخورد شود. برنامه نویس باید مطمئن باشد که آرایه ی str برای دریافت همه ی کاراکترهای وارد شده جا دارد.
برنامه ی کوچک زیر نشان می دهد که کاراکتر '\0' به رشته های کاراکتری الصاق می شود:

int main() 
{  char s[] = "ABCD";
   for (int i = 0; i < 5; i++)
      cout << "s[" << i << "] = '" << s[i] << "'\n";
}

در C++  به چند روش میتوان رشته های کاراکتری را دریافت کرده یا نمایش داد.
یک راه استفاده از عملگرهای کلاس string است. 
روش دیگر، استفاده از توابع کمکی است.


آرایه ای ازرشته ها:

به خاطر دارید که گفتیم یک آرایه ی دوبعدی در حقیقت آرایه‌ای یک بعدی است که هر کدام از اعضای آن یک آرایه ی یک بعدی دیگر است. مثلا در آرایه ی دو بعدی که به شکل مقابل اعلان شده باشد:

char name[5][20];

این آرایه در اصل پنج عضو دارد که هر عضو می‌تواند بیست کاراکتر داشته باشد. اگر آرایه ی فوق را با تعریف رشته های کاراکتری مقایسه کنیم، نتیجه این می‌شود که آرایه ی بالا یک آرایه ی پنج عنصری است که هر عنصر آن یک رشته ی کاراکتری بیست حرفی است.

مثال: برنامه ی زیر چند رشته ی کاراکتری را از ورودی می‌خواند و آن‌ها را در یک آرایه ذخیره کرده و سپس مقادیر آن آرایه را چاپ می‌کند:

{  char name[5][20];
   int count=0;
   cout << "Enter at most 4 names with at most 19 characters:\n";
   while (cin.getline(name[count++], 20)) ;
   --count;
   cout << "The names are:\n";
   for (int i=0; i      cout << "\t" << i << ". [" << name[i] << "]" << endl;
}

 

نکته:

 فراخوانیcin.getline(str,n);  باعث می‌شود که n کاراکتر به درون str خوانده شود و مابقی کاراکترهای وارد شده نادیده گرفته می‌شوند.

 

فایل:

 

یکی از مزیت‌های رایانه، قدرت نگهداری اطلاعات حجیم است. فایل‌ها این قدرت را به رایانه می‌دهند. اگر چیزی به نام فایل وجود نمی‌داشت، شاید رایانه‌ها به شکل امروزی توسعه و کاربرد پیدا نمی‌کردند.
 چون اغلب برنامه‌های امروزی با فایل‌ها سر و کار دارند، یک برنامه‌نویس لازم است که با فایل آشنا باشد و بتواند با استفاده از این امکان ذخیره و بازیابی، کارایی برنامه‌هایش را ارتقا دهد.
پردازش‌ فایل‌ در C++  بسیار شبیه‌ تراکنش‌های معمولی‌ ورودی‌ و خروجی‌ است زیرا این‌ها همه از اشیای جریان مشابهی بهره می‌برند. جریان fstream برای تراکنش برنامه با فایل‌ها به کار می‌رود. fstream نیز به دو زیرشاخۀ ifstream و ofstream تقسیم می‌شود.
 جریان ifstream برای خواندن اطلاعات از یک فایل به کار می‌رود و جریان ofstream برای نوشتن اطلاعات درون یک فایل استفاده می‌شود.
فراموش نکنید که این جریان‌ها در سرفایل تعریف شده‌اند.  پس باید دستور پیش‌پردازندۀ #include را به ابتدای برنامه بیافزایید. سپس می‌توانید عناصری از نوع جریان فایل به شکل زیر تعریف کنید:


 

ifstream readfile("INPUT.TXT");
ofstream writefile("OUTPUT.TXT");

توابع کار با فایل های متنی

 

هدر 
#include
تعریف متغیر و بازکردن (خواندن) 
ifstream file-var(“filepath”);
تعریف متغیر و بازکردن (نوشتن) 
ofstream file-var(“filepath”);
خواندن از فایل
file-var >> var-name;
نوشتن در فایل 
file-var << var-name;
خواندن فاصله و علامت های خاص
var-name = file-var.get();
کنترل پایان فایل هنگام خواندن
file-var.eof()
خواندن یک سطر 
file-var.getline(char*, max-length);

 

طبق کدهای فوق، readfile عنصری است که داده ها را از فایلی به نام INPUT.TXT می‌خواند و writefile نیز عنصری است که اطلاعاتی را در فایلی به نام OUTPUT.TXT می‌نویسد.
اکنون می‌توان با استفاده از عملگر >> داده ها را به درون readfile خواند و با عملگر << اطلاعات را درون writefile نوشت. به مثال زیر توجه کنید.
برنامه ی زیر، چند نام و تلفن مربوط به هر یک را به ترتیب از کاربر دریافت کرده و در فایلی به نام PHONE.TXT ذخیره می‌کند. کاربر برای پایان دادن به ورودی باید عدد 0 را تایپ کند.

#include
#include
#include
sing namespace std;
int main()
{  ofstream phonefile("PHONE.TXT");
   long number;
   string name;
   cout << "Enter a number for each name. (0 for quit): ";
   for ( ; ; )
   {  cout << "Number: ";
      cin >> number;
      if (number == 0) break;
      phonefile << number << ' ';
      cout << "Name: ";
      cin >> name;
      phonefile << name << ' ';
      cout << endl;
   }
getch(); 
}

توجه:

وقتی می‌خواهیم داده هایی را وارد کنیم، این داده ها را در قالب مجموعه‌ای از کاراکترها تایپ می‌کنیم. هم چنین وقتی می‌خواهیم نتایجی را به خارج از برنامه بفرستیم، این نتایج در قالب مجموعه‌ای از کاراکترها نمایش داده می‌شوند. لازم است که این کاراکترها به نحوی برای برنامه تفسیر شوند. مثلا وقتی قصد داریم یک عدد صحیح را وارد کنیم، چند کاراکتر عددی تایپ می‌کنیم.


شیء istream جریانی است که داده های مورد نیاز را از کاراکترهای وارد شده از صفحه کلید، فراهم می‌کند. شیء ostream جریانی است که داده های حاصل را به کاراکترهای خروجی قابل نمایش روی صفحه ی نمایش‌گر تبدیل می‌نماید. شیء ifstream جریانی است که داده های مورد نیاز را از داده های داخل یک فایل، فراهم می‌کند. شیء ofstream جریانی است که داده های حاصل را درون یک فایل ذخیره می‌نماید.


تذکرات:

• هنگام نوشتن اعداد و رشته ها در فایل، باید بین آن ها فاصله قرار داده شود تا بتوان آن ها را از فایل به درستی خواند.
• حتماeof()  هنگام خواندن باید کنترل شود.
• کاراکتر \ که برای جدا کردن دایرکتوری ها در مسیر فایل (path) در Windows استفاده می‌شود، برای اینکه در رشته نام فایل با escape sequence ها (مثل \n, \t, ...) اشتباه نشود باید به صورت \\ وارد شود. مثلا مسیر C:\hello.txt باید به صورت “C:\\hello.txt” در متن برنامه وارد شود. (می توان به جای این کاراکتر از / استفاده کرد.)
• حتی الامکان هنگام نامگذاری فایل ها، به آن ها پسوند داده شود. سعی شود از پسوندهای متداول برای فرمت های دیگر استفاده نشود.

تمرین2 (سری 13) – فرهنگ واژگان
 برنامه ای بنویسید که به کاربر امکان ایجاد یک فرهنگ لغات انگلیسی-فینگیلیش بدهد. امکانات مورد نیاز عبارتند از: اضافه کردن کلمه، حذف کلمه و تغییر معنای کلمه
 در صورتی که کاربر واژه انگلیسی را به صورت جمع و یا صرف شده وارد کند، چگونه برنامه می تواند کلمه ی ریشه و اصلی را در واژه نامه اش پیدا کند؟

آیا می توانید یک غلط یاب ساده به این برنامه اضافه کنید تا در صورتی که واژه ای یافت نشد، مناسب ترین واژگان ممکن را نمایش دهد؟

 

گام به گام با برنامه نویسی به زبان  C++

 


بخش پژوهش های دانش آموزی سایت تبیان

 

منبع:

Ctalk.ir 

firststep.ir

 

مطالب مرتبط

دیگر جلسات آموزشی

 

تلفن : 81200000
پست الکترونیک : public@tebyan.com
آدرس : بلوارکشاورز ، خیابان نادری ، نبش حجت دوست ، پلاک 12

ارتباط با ما

روابط عمومی

درباره ما

نقشه سایت

تعدادبازدیدکنندگان
افراد آنلاین