تبدیل رشته متنی (string) به عدد در زبان برنامهنویسی C یکی از موضوعات رایج و مهم است، زیرا در بسیاری از پروژهها نیاز است تا ورودیهای متنی کاربر به عدد تبدیل شوند تا بتوان آنها را پردازش کرد. زبان C به طور معمول از توابع کتابخانه استاندارد برای این منظور استفاده میکند. در این مقاله، به توضیح نحوه تبدیل رشته به عدد در زبان C با استفاده از توابع مختلف پرداخته میشود.
توابع رایج برای تبدیل رشته به عدد در C
در زبان C، سه تابع اصلی برای تبدیل رشته به عدد وجود دارد که هر کدام برای تبدیل به نوع دادهای خاص مورد استفاده قرار میگیرد. این توابع شامل:
atoi(): تبدیل رشته به عدد صحیح (int)atof(): تبدیل رشته به عدد اعشاری (float)strtol(): تبدیل رشته به عدد صحیح با کنترل بهتر (long int)
هر یک از این توابع دارای ویژگیها و کاربردهای خاص خود هستند.
1. استفاده از تابع atoi()
تابع atoi که مخفف “ASCII to Integer” است، برای تبدیل یک رشته به یک عدد صحیح استفاده میشود. این تابع ورودی رشتهای از نوع const char* میگیرد و آن را به یک عدد صحیح از نوع int تبدیل میکند.
سینتکس:
int atoi(const char *str);مثال:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
int num;
num = atoi(str); // تبدیل رشته به عدد صحیح
printf("عدد تبدیل شده: %d\n", num); // خروجی: 1234
return 0;
}نکات:
- اگر رشته شامل کاراکترهای غیر عددی باشد (مثل حروف)،
atoi()صفر را بازمیگرداند یا ممکن است به اشتباه عدد را تا اولین کاراکتر غیر عددی بخواند. - این تابع خطاهای احتمالی را بهخوبی کنترل نمیکند، به همین دلیل در موارد حساس بهتر است از توابع دقیقتر مانند
strtol()استفاده شود.
2. استفاده از تابع atof()
تابع atof که مخفف “ASCII to Float” است، برای تبدیل یک رشته به عدد اعشاری (float) استفاده میشود. این تابع نیز ورودی رشتهای از نوع const char* میگیرد و خروجی آن عدد اعشاری (double) است.
سینتکس:
double atof(const char *str);مثال:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "123.45";
double num;
num = atof(str); // تبدیل رشته به عدد اعشاری
printf("عدد اعشاری تبدیل شده: %.2f\n", num); // خروجی: 123.45
return 0;
}نکات:
- این تابع مشابه
atoi()برای عددهای اعشاری استفاده میشود و در مواردی که دقت بالایی نیاز است، میتواند مفید باشد. - مانند
atoi()،atof()نیز خطاهای مربوط به ورودیهای نادرست را بهخوبی مدیریت نمیکند.
3. استفاده از تابع strtol()
تابع strtol یک روش پیشرفتهتر برای تبدیل رشته به عدد صحیح است که امکان کنترل بیشتر و مدیریت خطاها را فراهم میکند. این تابع قابلیت تعیین مبنای عددی (base) و تشخیص قسمتهایی از رشته که قابل تبدیل به عدد نیستند را دارد.
سینتکس:
long int strtol(const char *str, char **endptr, int base);پارامترها:
str: رشتهای که باید تبدیل شود.endptr: آدرسی که به اولین کاراکتر غیر عددی پس از تبدیل اشاره میکند. میتوانید این مقدار را NULL قرار دهید.base: مبنای عدد (مانند 10 برای دهدهی یا 16 برای هگزادسیمال).
مثال:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "123abc";
char *ptr;
long num;
num = strtol(str, &ptr, 10); // تبدیل رشته به عدد صحیح در مبنای 10
printf("عدد تبدیل شده: %ld\n", num); // خروجی: 123
printf("باقیمانده رشته: %s\n", ptr); // خروجی: abc
return 0;
}نکات:
strtol()میتواند مبنای عدد را نیز تعیین کند (مانند مبنای 16 برای هگزادسیمال).- این تابع خطاها را بهتر از
atoi()مدیریت میکند و اشارهگری به اولین کاراکتر غیر عددی پس از عدد را برمیگرداند.
انتخاب بهترین تابع برای تبدیل رشته به عدد
- اگر به سادگی نیاز به تبدیل رشته به یک عدد صحیح دارید و نیازی به مدیریت خطا ندارید، میتوانید از
atoi()استفاده کنید. - اگر عدد اعشاری نیاز دارید،
atof()گزینه مناسبی است. - اگر نیاز به کنترل خطا و دقت بیشتری دارید، استفاده از
strtol()یاstrtod()برای اعداد اعشاری توصیه میشود.
در زبان C، توابع مختلفی برای تبدیل رشته به عدد وجود دارد که هر کدام برای موقعیتهای خاصی کاربرد دارند. برای تبدیلهای ساده، atoi() و atof() کار را به راحتی انجام میدهند، اما برای کاربردهای پیشرفتهتر و مدیریت خطاها، استفاده از strtol() و توابع مشابه بسیار مفیدتر خواهد بود. انتخاب تابع مناسب بستگی به نیاز شما و حساسیت برنامهتان دارد.

























