نام اين تابع مخفف ascii to integer مي باشد و در فايل سرآمد stdlib.h تعريف شده است. اين تابع يك رشته را دريافت و آن را تبديل به عدد مي كند. البته مسلما رشته بايد منحصرا از ارقام و علامت + يا – تشكيل شده باشد. بعنوان مثال چنانچه رشته "3478" را به آن بدهيم، عدد 3478 را باز خواهد گرداند. چنانچه رشته ورودي قابل تبديل به عدد نباشد (بدليل وجود كاراكترهاي غيرمجاز مانند حروف)، تابع مقدار 0 باز خواهد گرداند. پياده سازي اين تابع در زير آمده است: (دريافت برنامه)
کد:int atoi(const char string[]) { int i=0 , sign=1, number=0; if (string[0] == '-') { sign = -1; i = 1; } else if (string[0] == '+') i = 1; for (; string[i]; i++) if (string[i]>'0' && string[i]<'9') number = number * 10 + (string[i] – 48) ; // or (string[i] – '0') else return(0); return(sign * number); }
در تابع فوق، string رشته اي است كه قصد تبديل آن به عدد را داريم. متغير i شمارنده رشته است كه از 0 آغاز مي گردد و sign علامت عدد است كه بطور پيش فرض +1 درنظر گرفته مي شود. متغير number نيز مقدار عدد حاصل را در خود نگاه مي دارد. ابتدا بررسي مي شود اگر اولين عنصر آرايه string برابر '-' است، علامت عدد به -1 تغيير يافته و شمارنده رشته نيز يكي جلو مي رود. چنانچه اولين عنصر برابر '+' باشد، نيازي به تغيير علامت نيست ولي شمارنده رشته بايد جلو برود. سپس در داخل حلقه for، عناصر رشته string به ترتيب بررسي شده و درصورتيكه يك رقم باشند، به حاصل اضافه مي گردند و در غير اينصورت نيز مقدار 0 بازگردانده مي شود. دقت كنيد كه براي اضافه كردن يك كاراكتر رقمي به number، ابتدا از آن 48، كه كد اسكي كاراكتر 0 است، را كم مي كنيم تا مقدار عددي آن كاراكتر بدست آيد. بعنوان مثال كد اسكي '1' برابر 49 است و پس از كم كردن 48 از آن به رقم 1 مي رسيم. مي توان در برنامه بجاي عدد 48، كاراكتر '0' را از string[i] كم كرد. در ضمن number در ابتدا در 10ضرب مي شود و سپس با رقم جديد جمع مي شود تا رقم جديد در مكان يكان آن اضافه گردد.
تابع ديگري بنام itoa نيز وجود دارد که يک عدد را دريافت و آن را تبديل به يک رشته مي کند. مي توانيد اين تابع را بعنوان تمرين بنويسيد.
از همين دسته توابع، توابع مفيد ديگري همچون atof براي تبديل يک رشته به يک عدد اعشاري و atol براي تبديل يک رشته به يک عدد صحيح بزرگ نيز وجود دارند كه براي آشنايي با آنها مي توانيد به مستندات كامپايلر خود مراجعه كنيد.
توابعي كه مورد بحث قرار گرفتند، ازجمله مهمترين توابعي بودند كه براي كار با رشته ها مورد نياز هستند. اما در فايل سرآمد string.h توابع مفيد ديگري نيز وجود دارند كه براي آشنايي با آنها به مستندات كامپايلر خود رجوع كنيد.






پاسخ با نقل قول


علاقه مندی ها (Bookmarks)