PDA

View Full Version : سوال: جدا سازی رشته



hafez1
جمعه 28 مهر 1391, 10:27 صبح
من می خاک یه برنامه ای بنویسم که یه معادله رو به عنوان یک رشته دریافت کنه و بیاد جملاتش رو از هم جدا کنه بریزه تو یه لینک لیست.
چی جوری جملات رو جدا کنم که + و - ضریبا از بین نره.
مثلا اگه معادلم باشه 4x^2+2x^7_3x+1 چی جوری ضریبای - نگه داشته بشه؟

amin1softco
جمعه 28 مهر 1391, 11:37 صبح
اگر دوست داری کارت زود راه بیفته از کتابخانه های آماده (http://www.partow.net/programming/exprtk/index.html) یا + (http://muparser.sourceforge.net/) استفاده کن و گرنه باید با عبارت های پیشوندی و پشته کار کنی برای تجزیه معادله مثلاً
اینجوری فرض کن که تمام عبارات با هم جمع می شوند و بطور پیش فرض مثبت هستند مگر علامت - داشته باشند بعد از هم تفکیکشون کن
در کل اینجا (http://www.dailyfreecode.com/code/parse-string-operator-precedence-1805.aspx) رو ببین

hafez1
جمعه 28 مهر 1391, 14:11 عصر
در کل من می خام توی این برنامه کاربر یه معادله وارد کنه بد به ازای هر ایکسی که کاربر خاست مقدارشو حساب کنه.
در ضمن باید جملات این معادله رو توی لینک لیست نگه داریم.به این صورت که ضریب و توان هر جمله توی یه نود از لینک لیست نگه داشته بشه.ولی ضریب منفیا رو چی جوری نگه دارم؟
اصلا چی جوری جداشون کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

hafez1
جمعه 28 مهر 1391, 20:43 عصر
تابع c_str برای این کار چطوره؟؟؟؟؟؟؟ مطمئن نیسم جواب بده کمکم کنید . در واقع این تابع یک رشته را به صورت آرایه ای از کاراکترها تبدیل می کند.

amin1softco
جمعه 28 مهر 1391, 22:00 عصر
نمی دونم چرا امروز خیلی گیج میزنی
یک رشته از ورودی می خونی درست !
string e = "4x^2+2x^7_3x+1";
e[0] == ?
=4

بعد اینا داخل یک حلقه قرار میدی که به ترتیب بخونه بره جلو
e[i]
بعدشم چک می کنی چیه در ثانی لازم نیست که علامتش را ذخیره کنی فکر کن تفریق و جمع است و کلاً علامتی در نظر نگیر ولی می تونی در نودی که تعریف کردی یک علامت مشخص کنی که پیش فرض صفر است و وقتی به کارکتر - رسید 1 یا true بشه ...
باید بین عملگر ها و عملوند ها تفاوت قائل بشی +/-/*/^/

shahmohammadi
جمعه 28 مهر 1391, 22:54 عصر
سلام.
بهتره كه عملگر ضرب رو اجباري كنيد. يعني عبارت 4x نادرست باشه و درستش 4*x باشه.
در غير اين صورت كمي گنگ به نظر مي رسه. مثلا با رسيدن به عدي مثل 45 نمي شه فهميد منضور 45 هست يا 4*5.
من در چند برنامه كه براي اين كار بود ديدم كه * رو اجباري كرده بودند.

hafez1
شنبه 29 مهر 1391, 08:03 صبح
فکر کنم دارم سخت به برنامه نگاه می کنم.
من فقط نباید اینا رو جدا کنم که. باید توی یه لینک لیستم بریزمشون.ینی تک تک جملات رو وقتی جدا کردم قسمت ضریب و قسمت توانشو توی یه نود نگه دارم.
البته فکر کنم با این روشی که شما گفتید باید وقتی منفی رو دید ضریب رو منفی وارد کنه.

hafez1
شنبه 29 مهر 1391, 08:49 صبح
نمی دونم چرا امروز خیلی گیج میزنی
یک رشته از ورودی می خونی درست !
string e = "4x^2+2x^7_3x+1";
e[0] == ?
=4

بعد اینا داخل یک حلقه قرار میدی که به ترتیب بخونه بره جلو
e[i]
بعدشم چک می کنی چیه
می دونید من معادلم یه معادله ثابت نیست کاربر می تونه هرچی دلش خواست وارد کنه واسه همین من نمی تونم این طور که شما گفتید چک کنم.
اگه می تونسم چک کنم که کجا عدده خوب اگه بدیشم x بود می ذاشتمش توی ضریب .بد ^ می ذاشتم توی قسمت توان نود.
ولی آخه نمی شه.

one hacker alone
چهارشنبه 03 آبان 1391, 16:16 عصر
ببین مهندس برنامه شما جای گنگی نداره فقط طولانی هست
شما یک معادله از کاربر میگیرد در یک ارایه ذخیره میکنید بعد هم x رو میگیرد حالا برای تفکیک رشته ها همونطور که دوستان گفتن شما کاراکتر به کاراتر اون رشته رو میخونید و جاهایی که به علامت + _ میرسید اون رو با عدد کناری میریزید توی یک متغییر tmp و بعدش هم tmp رو با x محاسبه میکنید و این کار رو تا زمانی که معادله به پایان نرسیده جلو میبرید

hafez1
چهارشنبه 03 آبان 1391, 19:51 عصر
صورت کلی برنامه این جوریه:


این برنامه قراره دو چند جمله ای را بگیرد، آنها را به صورت شیء تبدیل کند
قابلیت های برنامه:
چاپ دو چندجمله ای از روی شیء های ساخته شده
جمع دو چندجمله ای و چاپ حاصل جمع
محاسبه مقدار دو چندجمله ای و مقدار حاصل جمع به ازای مقدار مجهول دریافتی

1. 4x^2+3x^4+5x^2
2. 5x^0-3x^6+4x^1

x = 1

print:
9x^2+3x^4
5x^0-3x^6+4x^1

sum:
9x^2+3x^4+5x^0-3x^6+4x^1

calculate:
18
من می خام بیام کاربرو اجبار کنم که + رو وارد کنه ینی به جای این که 4x^2-3x^4 رو وارد کنه بیاد و 4x^2+ -3x^4 رو وارد کنه. بد بیام و به تابه strtok بگم وقتی به + رسیدی چملارو جدا کن ولی مشکلی که هس اینه که توی تابع strtok با کاراکتر کار می کنه ولی چند جمله ای من رشتس.
بد وقتی که تک تک جملا رو جدا کرد باید یه جایی نگهشون دارم.مثلا توی یه آرایه ذخیرشون می کنم بد تک تک این جملا رو می گم وقتی به x و^ رسیدی با strtok جدا کنه تا ضریبو توانش جدا بشه و بتونم بریزم تو لینک لیست.
چطوره؟؟؟؟؟؟؟؟؟

hafez1
پنج شنبه 04 آبان 1391, 08:25 صبح
اگه لطف کنید مشکل strtok رو حل کنم ممنون می شم.
مثلا برنامه زیر رو ببینید ارور داره.


#include <iostream>
#include<conio.h>
#include <string.h> // prototype for strtok
using namespace std;

int main()
{
string s;
cin>>s;
char sentence[] = s;
char *tokenPtr;

cout << "The string to be tokenized is:\n" << sentence
<< "\n\nThe tokens are:\n\n";


tokenPtr = strtok( sentence, "+" );


while ( tokenPtr != NULL )
{
cout << tokenPtr<<"\n";




tokenPtr = strtok( NULL, "+" );
}


getch();
return 0;
}

amin1softco
شنبه 06 آبان 1391, 05:39 صبح
#include <iostream>
#include<conio.h>
#include <string.h> // prototype for strtok
using namespace std;

int main()
{
string s;
cin>>s;

char * sentence = strdup(s.c_str());;
char *tokenPtr;

cout << "The string to be tokenized is:\n" << sentence
<< "\n\nThe tokens are:\n\n";


tokenPtr = strtok( sentence, "+" );


while ( tokenPtr != NULL )
{
cout << tokenPtr<<"\n";




tokenPtr = strtok( NULL, "+" );
}


getch();
return 0;
}

hafez1
یک شنبه 07 آبان 1391, 19:23 عصر
ممنون جوابتون عالی بود .خیییییییییلی ممنون