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

string calculator

[复制链接]

2

主题

0

好友

17

积分

初级会员

Rank: 1

跳转到指定楼层
1#
发表于 2010-8-25 09:46 PM |只看该作者 |倒序浏览
我在弄一个利用string input的calculator~程序需要加减乘除还有普通的calculator用法~我大概是知道把所有的string放进temp里面~然后丢进function来做数学~得到了先乘除的value~然后在丢回temp~继续做其他的~例如~我的input时123+456*789~我必须先把全部放进temp~然后进入function做乘除~过后做了456*789的答案~就是说把359784放进temp~temp现在应该就是123+359784~然后又再loop过~做到完整答案为止~这是我agak agak写的程序~
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
void main()
{
char x[100];
char operant[10];
char nx[100];
char temp[100];
int n, i=0, j=0;
printf("?");
gets(x);
n=strlen(x);
for(i=0;i<n;i++)
{
nx[i]=x[i];
strncpy(temp,&x[i],1);
printf("%s",temp);
}
getchar();
}
void operant()
{
do
{
while(x[i]!='+' || x[i]!='-')
{
if(x[i]=='*')
nx[i-1]*nx[i+1];
else if(x[i]=='/')
nx[i-1]/nx[i+1];
}
}
while(x[i]!='+' || x[i]!='-')
{
if(x[i]=='+')
nx[i-1]+nx[i+1];
else if(x[i]=='-')
nx[i-1]-nx[i+1];
}
我真的不知道怎样拿跟存value~更不懂该怎样写下去~这是我的assignment~希望你们可以帮帮忙~




收藏收藏0

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

2#
发表于 2010-8-26 01:38 AM |只看该作者
我在弄一个利用string input的calculator~程序需要加减乘除还有普通的calculator用法~我大概是知道把所有的 ...
yangss 发表于 2010-8-25 09:46 PM



    好像没看到 Parse 这个动作。


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

3#
发表于 2010-8-26 01:44 AM |只看该作者
parse我完全不理解~我学c language不到三个月~初学者~paiseh paiseh~ ~可以教教我用吗?之前有人教我用atoi atof~这我也不认识它~那个会比较适合?请教教小弟~点条明路~


回复

使用道具 举报

4

主题

0

好友

118

积分

高级会员

Rank: 3Rank: 3Rank: 3

4#
发表于 2010-8-26 04:43 AM |只看该作者
atoi 和  atof 是 c 的 function

atoi 是用来 string convert 去 integer
atof 是用来 string convert 去 double

www.cplusplus.com/reference/clibrary/cstdlib/atof/


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

5#
发表于 2010-8-26 06:25 AM |只看该作者
本帖最后由 Super-Tomato 于 2010-8-26 06:28 AM 编辑
我在弄一个利用string input的calculator~程序需要加减乘除还有普通的calculator用法~我大概是知道把所有的string放进temp里面~然后丢进 function来做数学~得到了先乘除的value~然后在丢回temp~继续做其他的~例如~我的input时123+456*789~我必须先把全部放进temp~然后进入function做乘除~过后做了456*789的答案~就是说把359784放进temp~temp现在应该就是 123+359784~然后又再loop过~做到完整答案为止~这是我agak agak写的程序~
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. void main()
  6. {
  7. char x[100];
  8. char operant[10];
  9. char nx[100];
  10. char temp[100];
  11. int n, i=0, j=0;
  12. printf("?");
  13. gets(x);
  14. n=strlen(x);
  15. for(i=0;i<n;i++)
  16. {
  17. nx[i]=x[i];
  18. strncpy(temp,x[i],1);
  19. printf("%s",temp);
  20. }
  21. getchar();
  22. }
  23. void operant()
  24. {
  25. do
  26. {
  27. while(x[i]!='+' || x[i]!='-')
  28. {
  29. if(x[i]=='*')
  30. nx[i-1]*nx[i+1];
  31. else if(x[i]=='/')
  32. nx[i-1]/nx[i+1];
  33. }
  34. }
  35. while(x[i]!='+' || x[i]!='-')
  36. {
  37. if(x[i]=='+')
  38. nx[i-1]+nx[i+1];
  39. else if(x[i]=='-')
  40. nx[i-1]-nx[i+1];
  41. }
复制代码
我真的不知道怎样拿跟存value~更不懂该怎样写下去~这是我的assignment~希望你们可以帮帮忙~
yangss 发表于 2010-8-25 09:46 PM


想法大致上是這样,但是你的 coding 幾乎很亂,而且没仔细去了解函数的用法

1. strncpy(temp,x[i ],1);
不明白你一直复写這個干嘛,而且没搞清楚 strncpy 的第二参數作用,如果只是要复制字元(char)直接 temp[ i] = x[ i] 就好了

2. getchar();
之前都已經使用 gets 了,那麽你還用 getchar 函数做甚么??

3. void operant()
不知是复制過來的問題還是論壇的所見所得功能問題,怎么你自定义的函数會在 main 中?

4. do... while 用法錯誤,請翻查一下你的教學課本或小抄

5. 所有的数学运算部份都没有做變數儲存,這样的寫法是錯誤的




最後看了你的 while 部份發現你所编写的和你一開始說明的逻辑有出入
if(x[i ] == '*')
            nx[i-1]*nx[i+1];

你目前做的只能够把個位數做加减,一個 char 就只能存一個字元,所以 23 不等于 2,3


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

6#
发表于 2010-8-26 11:58 AM |只看该作者
那就是说strncpy用不着?用temp[i]=x[i]把各char储存就可以?我怎么没想到~现在temp[i]已经储存所有string~可是我还是不会把它们归类成正正的数字~就好像123+456~各temp[i]储存了每个char~但它们始终都是一个个的单数字~temp[0]=1,temp[1]=2,temp[2]=3等等~我要怎样把它们归类回变成123整数这样?我也知道我的数学运算部份都没有做變數儲存~但如果我没能把它们归类成数字的话~我就写不出~问题就这样~不懂得把它们弄成actual value~运算部分就卡住了~我也很清楚目前做的只能够把個位數做加减~就像123+456变成了3+4罢了~对不对?


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

7#
发表于 2010-8-26 03:27 PM |只看该作者
那就是说strncpy用不着?用temp[i ]=x[i ]把各char储存就可以?我怎么没想到~现在temp[i ]已经储存所有string~可是我还是不会把它们归类成正正的数字~就好像123+456~各temp[i ]储存了每个char~但它们始终都是一个个的单数字~temp[0]=1,temp[1]=2,temp[2]=3等等~我要怎样把它们归类回变成123整数这样?我也知道我的数学运算部份都没有做變數儲存~但如果我没能把它们归类成数字的话~我就写不出~问题就这样~不懂得把它们弄成actual value~运算部分就卡住了~我也很清楚目前做的只能够把個位數做加减~就像123+456变成了3+4罢了~对不对?
yangss 发表于 2010-8-26 11:58 AM


所以以你目前的方式來做的話,首先要循环的是在判断遇到數學符号的時候才使用 strncpy 把幾個数字的字元儲存为一個字串(string)

char * strncpy ( char * destination, const char * source, size_t num );

Copy characters from stringCopies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.

No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.

ParametersdestinationPointer to the destination array where the content is to be copied.sourceC string to be copied.numMaximum number of characters to be copied from source.

Return Valuedestination is returned.
   

大多在网上找到都是做個基本從第一個字開始复制的范例,而你仔细去阅读参數的 “型态” 就無法运用,以下這個例子自己去測試後學習以後怎么去了解各函数所提供的参數運用


  1. #include<stdio.h>
  2. #include<string.h>

  3. int main ()
  4. {
  5.   char s[17] = "This is a string.";
  6.   char d[8] = "";

  7.   strncpy(d, s, 7);
  8.   printf("strncpy from char 0 to 7 will get value : (%s)\n", d);

  9.   strncpy(d, s + 10, 7);
  10.   printf("strncpy from char 10 to end will get : (%s)\n\n", d);

  11.   return 0;
  12. }
复制代码


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

8#
发表于 2010-8-26 11:57 PM |只看该作者
我已经改良了我的code~已经可以把所有的数目还有加减乘除sign~各都进入了array~我想问问如果我要拿加减乘除sign前后的数目来做数学~我应该怎样做?


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

9#
发表于 2010-8-27 12:19 AM |只看该作者
本帖最后由 Super-Tomato 于 2010-8-27 12:22 AM 编辑
我已经改良了我的code~已经可以把所有的数目还有加减乘除sign~各都进入了array~我想问问如果我要拿加减乘除 ...
yangss 发表于 2010-8-26 11:57 PM



既然你都已經分别存入陣列中了,那麽只要依照之前循环搜索即可取得運算符号
但 C 的陣列没函数套用做新增/修改或删除,所以你就必須自己编写以方便自己


要不你就使用看看 struct 配合 linked-list 對你來說會不會简单些


回复

使用道具 举报

2

主题

0

好友

17

积分

初级会员

Rank: 1

10#
发表于 2010-8-27 12:33 AM |只看该作者
又再更新了~已经可以做加减乘除~但问题就是加减混乘除一起做就会有问题~例如~5+5*5+5应该得到35~可是我的答案是30~我觉得index出了问题~我把sign跟数目的index分开~可是它会loop不完~我写在纸草稿~发现index会有空的value~


回复

使用道具 举报

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

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

GMT+8, 2024-7-16 12:43 AM , Processed in 0.107133 second(s), 27 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.
回顶部