تبدیل integer به رشته. - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تبدیل integer به رشته.

+1 امتیاز

سلام

چطور می تونم یک عدد ۳ رقمی از نوع int رو که در یک بایت قرار داره در یک رشته ی ۳ بایتی قرار بدم.
در حالت کلی می خوام بدونم چطور یک مقدار غیر رشته ای رو میشه در یک رشته ذخیره کرد در‌ واقع چیزی دقیقاً برعکس تابع atoi
منظورم رو در کد واضح تر می تونم برسونم ٫
مثلاً در این مثال چطور محتوای متغییر number رو در str ذخیره کنم؟
اگر کد ناخواناست اینجا هم گذاشتمش :

http://paste.ubuntu.com/11865925/


void main (void ) {
    int number = 299 ;
    char str[3];
    /* I tried something like this below , you know this could be wrong :) , please explain why these      * are wrong.  thanks
    * str = (chat)number ;
    * strcpy( str , (char)number ) ;
    */
}


در‌واقع می خوام جواب سؤال بالا رو بدونم چون یک برنامه‌ای نوشتم که مثلث زیر رو تولید می کنه و مستقیم چاپش می کنه ،الان دیگه نمی خوام چاپ کنه می خوام در یک متغییر از نوع رشته ذخیره کنه. (البته می دونم که در زبان c رشته نداریم من هر جا که گفتم رشته منظورم همون آرایه ای از کاراکتر هاست . )
اون اعدادی رو که تولید شدن رو. نمی دونم چطور می تونم در یک رشته ذخیره کنم.

          0
         101
        21012
       3210123
      432101234
     54321012345
    6543210123456
   765432101234567
  87654321012345678
 9876543210123456789

سوال شده تیر 21, 1394  بوسیله ی Kmoh (امتیاز 18)   3 4 5
دوباره تگ گذاری شد تیر 24, 1394

1 پاسخ

+2 امتیاز
دقیقا طرف مقابل تابع ()atoi تابع ()itoa هست.

برای تبدیل کردن اعداد به رشته راه های زیادی هست. مثلا میتونی جای اینکه مثلثت رو  با تابع ()printf توی خروجی چاپ کنی، بیای با تابع ()sprintf توی یه رشته اون رو چاپ کنی. تابع ()sprintf دقیقا مثل تابع printf کار میکنه، فقط یک اشاره گر به رشته ی مورد نظر میگیره که قراره توی اون بنویسه. یا از همون تابع ()itoa استفاده کنی و یا توابع دیگه. تو کد بالا آرایه کاراکتر ۳ حرفی ایجاد کردی، اگر عدد ۳ رقمی بشه میتونه مشکل درست کنه. چون همه ی رشته ها با یک کاراکتر NULL تموم میشن. یعنی اگر طول یک رشته ۳ بایت باشه. درواقع باید ۴ بایت فضا بهش داده بشه. بخاطر کاراکتر NULL. بصورت ساده تر آخرین بایت برابر باشه با 0 . که بهش میگن null-terminated string . اگر کاراکتر 0 یا همون NULL آخر رشته ها نباشه، باعث میشه توابع نتونن انتهای رشته رو تشخیص بدن. و همه ی توابعی که با null-terminated string ها کار میکنن همیشه به دنبال بایتی با مقدار 0 میگردن تا بتونن طول رشته بدست بیارن.

برای مثلث هم میتونی یه رشته ی خالی درست کنی و فضای مورد نیاز رو براش در نظر بگیری + ۱ بایت اضافی برای کاراکتر 0 . و بعد بجای چاپ کردن اعداد با ()printf از ()sprintf استفاده کن و به اولین پارامترش هم رشته ی خالی رو بده. همین.
پاسخ داده شده تیر 24, 1394 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
...