用c++解一元一次方程。。 50

这个一元一次方程是要用String接受的,也就是说方程存在一个string变量里。解方程很简单,关键是怎么把各项系数和常数项分离出来。求高手解答。也可以+QQ651125... 这个一元一次方程是要用String 接受的,也就是说方程存在一个string变量里。

解方程很简单,关键是怎么把各项系数和常数项分离出来。

求高手解答。也可以+QQ651125352帮我一把~

这题的分数就是晾着,教会我了。我再追加50分。!
最好先说一说分离的方法~然后再贴代码~关键是要教会我,不是拿代码来了事的。

我自认为学习能力不错。如果你思绪清楚,教会我不是什么难事。。

急急急~要参加比赛的。
展开
 我来答
MusicAudience
2011-04-22
知道答主
回答量:36
采纳率:0%
帮助的人:24.7万
展开全部
字符串初始化全为h吧。输入一个字符串付给string。(方程中自变量以x表示)然后依从字符串最末尾一个字符开始判断是否为h(ansic码判断),为h则跳到上一个元素,直到找到一个阿拉伯字符开始(同样ansic码判断),依次记下符,直到出现“=“为止。将该记录下的字符转为整形数备用。在依次向左对字符串检索判断,找到含"x"的字符开始,又依次记录下其左边出现的阿拉伯字符串,直到出现非阿拉伯字符。同样将该组字符转换为整形数(考虑到有时x系数为1,习惯上不写出,那么就要做相应判断了,具体不多说了,手机打字很辛苦,写不下了)
追问
你这样的方式我想过的,不过这样的方式需要分析那个字符串好多次,有点浪费内存空间。不太可取~
百度网友ea0a4f2
2011-05-06 · 超过31用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:71.3万
展开全部
先找一下里面的字母
那个字母,存入一个char
然后找字母前面的系数(“=”之前)存在sumx1里
找普通的数字(后面没有字母的)(“=”之前)存在sum1里
再找字母前面的系数(“=”之后)存在sumx2里
找普通的数字(后面没有字母的)(“=”之后)存在sum2里
cout<<((sum1-sum2)/(sumx1-sumx2))
。我记得noip2000年复赛考过的程序自己搜一下,c++的程序比较少见,有pascal的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a9d3ce5
2011-04-22 · TA获得超过364个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:314万
展开全部
#include<iostream>
#include<string>
using namespace std;
int F(int s,int e,string f)//将3个数 a,b,c分离的函数
{
int sum=f[s]-'0';
while(s<e-1)
{

sum=(sum)*10+(f[s+1]-'0');
s++;

}
return sum;
}

int main()
{
int result;
int fuhao=0,dengyu,x;
string f;
cin>>f;
int size=f.length();
for(int i=0;i<size;i++)
{
if(f[i]=='+'||f[i]=='-')fuhao=i;
if(f[i]=='=')dengyu=i;
if(f[i]=='x')x=i;
}
int a=F(0,x,f);
int b;
if(fuhao==0)b=0; //b可能为0的情况
else b=F(fuhao+1,dengyu,f);
int c=F(dengyu+1,size,f);
cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;
if(x==0)result=c-b;
else if(fuhao==0)result=c/a;
else if(f[fuhao]=='+')result=(c-b)/a;
else if(f[fuhao]=='-')result=(c+b)/a;
cout<<result<<endl;
return 0;
}
//测试了可以的,不过只能处理 一般形式的一元一次方程,既ax+b=c
//10x+5=25
//10x=20
//ps:本人也就一菜鸟
追问
你的这种解法局限性很大~你测试测试这个方程:3x-5-10x+301=80x+2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
endall_man
2011-04-21 · TA获得超过154个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:117万
展开全部
要分离各数据就要确定分格符,分格通常为空格或者差别符例如:数字与字母之间3X,相当于3*X,3X=12,完整为3*X=12;根据差别分离,字母与数字的差别与运算符号的差别以及运算法则,分离出3,*,X,=,12分离以后,进行运算就简单多了这里需要个运算类;会用到switch这个语句:
分离代码如下:
头文件自己写
struct data{//声明一个数据结构
int ds=0;//数据内容
int lei=0;//数据类别(0:数字,1:小括号,2:中括号,3:为大括号,4:字母则未知量,5:为运算符;6:为忽略)
}
data FenXi(char c)//分析字符意义
{
data d=new data();
d.ds=c;
if(c>47&&c<58)
{
d.ds-='0';
d.lei=0;
}
else if((c>64&&c<91)||(c>96&&c<123))
{
d.lei=4;
}
else
{
switch(c)
{
case '(':
case ')':
d.lei=1;
break;
case '[':
case ']':
d.lei=2;
break;
case '{':
case '}':
d.lei=3;
break;
..............部分省略,请自行参照添加
list<data> FenLI(string fangcheng)
{
list<data> da=new list<data>();//新建一个数据向量
da.add(FengXi(fangcheng[0]));
for(int i=1;i<fangcheng.length;i++)
{
data d=FengXi(fangcheng[i]);
if(d.lei==0)
{
if(fangcheng[i-1].lei==0)
{
fangcheng[i-1].ds*=10;
fangcheng[i-1].ds+=d.ds;
}
else
{
fangcheng.add(d);
}
}
else
{
fangcheng.add(d);
}
return fangcheng;
}
追问
你这个方法复杂度太高,执行效率不太高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式