注册 登录
编程论坛 C++教室

刚发帖问的程序贴出来大家看看,欢迎讨论

毕业旅行 发布于 2010-08-19 14:48, 582 次点击
程序代码:
#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++重写)

程序大家帮看看,有啥问题没,您严厉的目光才能促成我的进步哈。

然后,其实我想说,我还是不理解那个string 和CString 两个东西的区别啊,刚才的帖子谁帮继续看看啊。

还有谁有C++的函数库的说明书可以发我份吗,谢谢。。。

7 回复
#2
毕业旅行2010-08-19 14:50
对了,之前的sprintf(&temp[0],"%f",num[0]);的写法有问题,运行结果会少位数

讨论下string 和char [] 的首地址的区别哈。。
#3
mxs8102010-08-19 15:13
c/c++函数使用说明书,我已经上传到咱们的下载频道了
https://down.bccn.net/424.html

string和CString的异同,你百度一下,这个问题网上会有很全面的回答了~
#4
毕业旅行2010-08-19 15:24
回复 3楼 mxs810
我昨天下了发现不能用的。。。页面刷不出来。

差点就想举报了都
#5
mxs8102010-08-19 17:24
以下是引用毕业旅行在2010-8-19 15:24:15的发言:

我昨天下了发现不能用的。。。页面刷不出来。

差点就想举报了都
不会吧,我都用了好几年了啊,咋会不能用呢?
#6
毕业旅行2010-08-19 20:02
  已取消到该网页的导航
   
   您可以尝试以下操作:
     重新键入地址。
 
是双击打开么?我右边的框里是以上文字。。点左边的东西也都没用哈。。。
#7
最近不在2010-08-19 20:22
点击时,不要选择总是询问,就ok了。
#8
毕业旅行2010-08-19 20:29
回复 7楼 最近不在
啊,果断专业啊,谢谢,可以用了~~~
1