![]() |
#2
毕业旅行2010-08-19 14:50
|

#include<iostream>
#include<stdio.h>
#include<string>
#include<stdlib.h>
using namespace std;
string calculate(string str)
{
double num[100];//把str里由符号分隔的数存入num数组中
int nCount=0;//num数组的下标
char opr[100];
string temp;
int pos=0;
int lastopr=0;
int i;
for(i=0;i<str.length();i++)
{
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
{
temp=str.substr(pos,i-pos);
pos=i+1;
num[nCount]=atof(temp.c_str());
opr[nCount]=str[i];
nCount++;
lastopr=i;
} //数字和符号的存储格式为 数 num:num[0],num[1]...num[nCount-1],num[nCount].
} // 符号 opr:opr[0],opr[1]...opr[nCount-1].
//把最后一个数字放入数组中
temp=str.substr(lastopr+1,str.length()-lastopr-1);
num[nCount]=atof(temp.c_str());
//先算乘除法
i=0;
while(i<nCount)
{
if(opr[i]=='*'||opr[i]=='/')
{
switch(opr[i])
{
case'*':num[i]*=num[i+1];break;
case'/':num[i]/=num[i+1];break;
}
int j=i+1;
while(j<nCount)
{
num[j]=num[j+1];
opr[j-1]=opr[j];
j++;
}
nCount--;
i--;
}
i++;
}
//再算加减法
i=0;
while(i<nCount)
{
if(opr[i]=='+'||opr[i]=='-')
{
switch(opr[i])
{
case'+':num[i]+=num[i+1];break;
case'-':num[i]-=num[i+1];break;
}
int j=i+1;
while(j<nCount)
{
num[j]=num[j+1];
opr[j-1]=opr[j];
j++;
}
nCount--;
i--;
}
i++;
}
char tempChar[100];
sprintf(tempChar,"%.6f",num[0]);
temp=tempChar;
return temp;
}
int main()
{
string str;
cin>>str;
cout<<calculate(str)<<endl;
return 0;
}
这是一个计算多项式的程序的一部分,解决的是不带括号的加减乘除四则运算。(之前用C写过,没有string类还要麻烦很多。。。具体要用了,所以打算用C++重写)#include<stdio.h>
#include<string>
#include<stdlib.h>
using namespace std;
string calculate(string str)
{
double num[100];//把str里由符号分隔的数存入num数组中
int nCount=0;//num数组的下标
char opr[100];
string temp;
int pos=0;
int lastopr=0;
int i;
for(i=0;i<str.length();i++)
{
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
{
temp=str.substr(pos,i-pos);
pos=i+1;
num[nCount]=atof(temp.c_str());
opr[nCount]=str[i];
nCount++;
lastopr=i;
} //数字和符号的存储格式为 数 num:num[0],num[1]...num[nCount-1],num[nCount].
} // 符号 opr:opr[0],opr[1]...opr[nCount-1].
//把最后一个数字放入数组中
temp=str.substr(lastopr+1,str.length()-lastopr-1);
num[nCount]=atof(temp.c_str());
//先算乘除法
i=0;
while(i<nCount)
{
if(opr[i]=='*'||opr[i]=='/')
{
switch(opr[i])
{
case'*':num[i]*=num[i+1];break;
case'/':num[i]/=num[i+1];break;
}
int j=i+1;
while(j<nCount)
{
num[j]=num[j+1];
opr[j-1]=opr[j];
j++;
}
nCount--;
i--;
}
i++;
}
//再算加减法
i=0;
while(i<nCount)
{
if(opr[i]=='+'||opr[i]=='-')
{
switch(opr[i])
{
case'+':num[i]+=num[i+1];break;
case'-':num[i]-=num[i+1];break;
}
int j=i+1;
while(j<nCount)
{
num[j]=num[j+1];
opr[j-1]=opr[j];
j++;
}
nCount--;
i--;
}
i++;
}
char tempChar[100];
sprintf(tempChar,"%.6f",num[0]);
temp=tempChar;
return temp;
}
int main()
{
string str;
cin>>str;
cout<<calculate(str)<<endl;
return 0;
}
程序大家帮看看,有啥问题没,您严厉的目光才能促成我的进步哈。
然后,其实我想说,我还是不理解那个string 和CString 两个东西的区别啊,刚才的帖子谁帮继续看看啊。
还有谁有C++的函数库的说明书可以发我份吗,谢谢。。。