| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:刚发帖问的程序贴出来大家看看,欢迎讨论
只看楼主 加入收藏
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
刚发帖问的程序贴出来大家看看,欢迎讨论
程序代码:
#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++的函数库的说明书可以发我份吗,谢谢。。。

搜索更多相关主题的帖子: 发帖 欢迎 
2010-08-19 14:48
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
对了,之前的sprintf(&temp[0],"%f",num[0]);的写法有问题,运行结果会少位数

讨论下string 和char [] 的首地址的区别哈。。
2010-08-19 14:50
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:5 
c/c++函数使用说明书,我已经上传到咱们的下载频道了
https://down.bccn.net/424.html

string和CString的异同,你百度一下,这个问题网上会有很全面的回答了~

授人以鱼不如授人以渔
2010-08-19 15:13
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
回复 3楼 mxs810
我昨天下了发现不能用的。。。页面刷不出来。

差点就想举报了都
2010-08-19 15:24
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
以下是引用毕业旅行在2010-8-19 15:24:15的发言:

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

差点就想举报了都
不会吧,我都用了好几年了啊,咋会不能用呢?

授人以鱼不如授人以渔
2010-08-19 17:24
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
  已取消到该网页的导航
   
   您可以尝试以下操作:
     重新键入地址。
 
是双击打开么?我右边的框里是以上文字。。点左边的东西也都没用哈。。。
2010-08-19 20:02
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:5 
点击时,不要选择总是询问,就ok了。
2010-08-19 20:22
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
回复 7楼 最近不在
啊,果断专业啊,谢谢,可以用了~~~
2010-08-19 20:29
快速回复:刚发帖问的程序贴出来大家看看,欢迎讨论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066430 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved