Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
楼主: yangss
打印 上一主题 下一主题

string calculator

[复制链接]

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

11#
发表于 2010-8-27 12:46 AM |只看该作者
又再更新了~已经可以做加减乘除~但问题就是加减混乘除一起做就会有问题~例如~5+5*5+5应该得到35~可是我的答 ...
yangss 发表于 2010-8-27 12:33 AM



你應該是删了最後的 index 所以就没加上 5

用你目前的測試看看 1+2*5+4/2-2-1 會是多少,11??


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

12#
发表于 2010-8-27 12:52 AM |只看该作者
答案是 -1...


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

13#
发表于 2010-8-27 01:01 AM |只看该作者
int main()
{
        char txt[200];
        char temp[200][200];
        char opt[200];
        float num[200];
        int i=0, j=0, k=0, n=0, m=0;
       
        printf("?\n");
        gets(txt);
       
        i = strlen(txt);
for(j=0;j<i;j++)
        {
                if(!(txt[j]=='+' || txt[j]=='-' || txt[j]=='*' || txt[j]=='/'))
                {
                         temp[m][k] = txt[j]; k++;
                }
                else
                {                       
            opt[n] = txt[j]; n++;
                        num[m] = atof(temp[m]); m++;
                        k=0;
                                   
                }
        }
        num[m] = atof(temp[m]); m++;
int yee = 0; float ans = 0;
       
        int asd = 0;
       
        asd = strlen(opt);
       
        for(j=0;j<asd;j++)
        {
                if(opt[j]=='*')
                {
                        num[j+1] = num[j] * num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];                        
                }
                if(opt[j]=='/')
                {
                        num[j+1] = num[j] / num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];                        
                }
        }
for(j=0;j<asd;j++)
        {
                if(opt[j]=='+')
                {
            num[j+1] = num[j] + num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];
                                   
                }
                if(opt[j]=='-')
                {
                        num[j+1] = num[j] - num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];                                
                }
        }
       
   
           
       
        printf("%f",ans);
       
        getchar();
我的程序


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

14#
发表于 2010-8-27 03:01 AM |只看该作者
int main()
{
        char txt[200];
        char temp[200][200];
        char opt[200];
        float num[200];
        int i=0,  ...
yangss 发表于 2010-8-27 01:01 AM



下次把你的 coding 标记起来,不然這样很难看
你的問題主要是在後面運算的時候出現, 假设我要驗算 1+2*3+4 的話

首先你是把数字全記錄在 num 變數中,所以會是
num = 1       2       3       4

之後先搜索到 * 就進行 num[1] 和 num[2] 的乘而使陣列變成
num = 1       6       6       4

再來是 + 而開始對位置 num[0] 和 num[1] 做加法後得陣列
num = 7       7       6       4

最後步驟是做 num[2] + num[3], 所以你可以從上一步看到你的問題點
7       7       10      10


這就是我說的 C 陣列必須做修改和删除不必要的原因


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

15#
发表于 2010-8-27 03:12 AM |只看该作者
对了对了~就是这个问题~我在纸上草稿算也是这样~哪有办法可以删除已做了答案的index删除?或者是把数目移前或移后进入其它index?还是要改statement?还有什么办法?


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

16#
发表于 2010-8-27 08:22 AM |只看该作者
对了对了~就是这个问题~我在纸上草稿算也是这样~哪有办法可以删除已做了答案的index删除?或者是把数目移前或移后进入其它index?还是要改statement?还有什么办法?
yangss 发表于 2010-8-27 03:12 AM



所以我才說要自己寫函数删除啊,其实方法就只是把後面的陣列往前 assign 就行,如下:


num = {1, 2, 3, 4}
opt = "+*+"

num = {1, 6, 4}
opt = "++"

num = {7, 4}
opt = "+"


num的长度由 m 控制,所以每次往前 assign 的時候要記得把 m 减少


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

17#
发表于 2010-8-30 10:33 PM |只看该作者
这个函数我应该怎样开始?指点指点~


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

18#
发表于 2010-8-31 12:39 AM |只看该作者
这个函数我应该怎样开始?指点指点~
yangss 发表于 2010-8-30 10:33 PM



這里你自己都應用過了啊,怎么不变通呢??
        for(j=0;j<asd;j++)
        {
                if(opt[j]=='*')
                {
                        num[j+1] = num[j] * num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];                        
                }
                if(opt[j]=='/')
                {
                        num[j+1] = num[j] / num[j+1];
                        num[j] = num[j+1];
            ans = num[j+1];                        
                }
        }


以你目前的编写情况來看,不嫌麻烦的话就是不用函数,但需要在每個運算符号中寫一次
而要轻松點的方式就是使用函数把 num 和 opt 中多餘不必要的陣列删掉,當然是用 pointer 方式可以简化很多步驟


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

19#
发表于 2010-9-1 12:49 AM |只看该作者
那我是不是要用pointer来指定那个index应该用,那个index不应该用?


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

20#
发表于 2010-9-1 08:02 AM |只看该作者
那我是不是要用pointer来指定那个index应该用,那个index不应该用?
yangss 发表于 2010-9-1 12:49 AM



你對 pointer 没甚么概念,所以還是不要用的好,一知半解最危险
現在你自己草稿在纸上,看看你的陣列要怎么改变,要删除哪一個和删除之後會是形成怎样的結果


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-11-20 04:25 AM , Processed in 0.093506 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部