تبدیل یک رشته به معادل عددی آن

mfahiminia

New Member
سلام

وقتی در برنامه رشته عددی وارد می شه چطور به مقدار عددی تبدیل می شه؟
 

the_king

مدیرکل انجمن
سلام

وقتی در برنامه رشته عددی وارد می شه چطور به مقدار عددی تبدیل می شه؟

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

عنوان تاپیک ویرایش گردید.

برای تبدیل رشته به عدد مجموعه ای از توابع در stdlib.h (در بعضی کامپایلر ها cstdlib.h) تعریف شده که نحوه
استفاده شان تقریبا یکسان است، یک پارامتر ورودی دریافت می کنند که همان رشته *char است و خروجی شان
یک عدد که البته در هر کدام از این توابع نوع داده خروجی فرق می کند.

تابع ()atoi یک رشته را به عددی از نوع داده int تبدیل می کند که طبیعتا بدون اعشار خواهد بود، مثلا :
کد:
    char a[] = "1234";
    int i = atoi(a);

تابع ()atol یک رشته را به عددی از نوع داده long int تبدیل می کند که آن هم بدون اعشار خواهد بود، مثلا :
کد:
    char a[] = "123456789";
    long int i = atol(a);

تابع ()atof یک رشته را به عددی از نوع داده double تبدیل می کند که عددی اعشاری خواهد بود، مثلا :
کد:
    char a[] = "1234.56";
    double i = atof(a);

تابعی با نام ()strtol می تواند یک رشته را از مبنای عددی مشخصی به معادل عددی در مبنای 10 تبدیل کند،
مثلا یک رشته A3E که در مبنای 16 (هگزادسیمال) است را معادل عددی 2622 تبدیل کند.
پارامتر اول رشته مورد نظر است.
پارامتر دوم اختیاری است و می تواند انتهای رشته عددی را مشخص کند که غالبا با null یا 0 مشخص می شود.
پارامتر سوم مبنای عددی رشته است، مثلا 2 برای باینری (Binary) و 10 برای دسیمال (Decimal) و 8 برای اکتال (Octal) و ...
خروجی این تابع یک عدد صحیح در مبنای long int است.

مثلا :
کد:
    char a[] = "A3E";
    long int i = strtol(a, 0, 16);

تابعی با نام ()strtod شبیه ()atof است، با این تفاوت که پارامتر اختیاری دوم می تواند انتهای رشته عددی
را مشخص کند که البته عموما با همان مقدار 0 نادیده گرفته می شود.

مثلا :
کد:
    char a[] = "3.14159";
    double i = strtod(a, 0);

تابعی هم با نام ()strtoul شبیه به ()strtol می باشد، فقط فرق شان در این است که strtoul اعداد را بدون علامت
مثبت و منفی (unsigned) محاسبه می کند، یعنی خروجی اش unsigned long int است.

مثلا :
کد:
    char a[] = "1010011";
    unsigned long int i = strtoul(a, 0, 2);
 

tamana74

New Member
چطور میشه string را به int تبدیل کرد؟؟
یا حافظه ی رشته char را تا رسیدن به کارکتر مورد نظر پاک کرد؟
 

the_king

مدیرکل انجمن
چطور میشه string را به int تبدیل کرد؟؟
یا حافظه ی رشته char را تا رسیدن به کارکتر مورد نظر پاک کرد؟

رجوع شود به :
تبدیل یک رشته به معادل عددی آن

حافظه رشته تا جایی تفسیر و پردازش میشه که کاراکتر null یا کد 0 قرار گرفته، مقدار هایی که در کاراکتر های بعدی
قرار می گیره اهمیتی نداره، مقدارشون تاثیری در پردازش های رشته نداره.
بنابر این اگه قراره تا جایی پاک بشه، موقعیت جایی که قراره پاک بشه مقدار 0 ثبت کنید و به کاراکتر های بعدی کاری نداشته باشید.

پاک کردن رشته از جایی که حرف p هست که خود p هم حذف میشه :
کد:
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s[10] = "sample";
    char *p = strchr(s, 'p');
    *p = 0;
    cout << s << endl;
    return 0;
}

رشته تا کاراکتر p باقی بمونه و بعد از p حذف بشه :
کد:
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s[10] = "sample";
    char *p = strchr(s, 'p');
    *(p + 1) = 0;
    cout << s << endl;
    return 0;
}
 

tamana74

New Member
مثلا رشته 10x^2+3x^5 رو دارم چطور به int تبدیلش کنم تا به ضریب ها و توانهایx دسترسی داشته باشم؟؟تابع atof وبقیه برای char نوشته شده ک برای string که نمیشه
 

the_king

مدیرکل انجمن
مثلا رشته 10x^2+3x^5 رو دارم چطور به int تبدیلش کنم تا به ضریب ها و توانهایx دسترسی داشته باشم؟؟تابع atof وبقیه برای char نوشته شده ک برای string که نمیشه

برای کلاس های string ، یک تابع ()c_str هست که رشته رو با آدرس *char بر می گردونه.

کد:
    string s = "1023";
    int n = atoi(s.c_str());
    cout << n << endl;

در ضمن اینها تابع تبدیل رشته به عدد اند، نه فرمول به عدد. روتین آماده ای در کتابخانه های استاندارد ++C برای منظور شما وجود نداره.
کاری که شما انجام می دهید نهایتا پردازش رشته infix مثل همون "10x^2+3x^5" برای قرار دادن عملگر ها و عملوند هایش در پشته :
کد:
10 * x ^ 2 + 3 * x ^ 5
و بعد تبدیل اش به یک postfix ئه :
کد:
10 x 2 ^ * 3 x 5 ^ * +
به این دلیل که الگوریتم محاسبه در postfix ساده است.

Infix to Postfix Convertor

calculator which can calculate cosine and log and simple operation
 

tamana74

New Member
ممنون از راهنماییتون .
اون فرمول نیست فقط یه رشته ترکیبی از حروف و اعداد هستش.ممنون از اینکه وقتتون رو گذاشتید
 

جدیدترین ارسال ها

بالا