在VC中:字符型数据相加减的问题!都快把我给急死了。 (50分)

S

sydan

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥,我是从来没有搞过VC的。但因为工作需要。经理硬要求我搞我也没得办法。现遇到如下问题。实在找不到能够解决的办法才到Delphi大富翁来试试。还望版主做主啊!!!
问题是这样的。我现在有:CString aa,bb,cc;
三个变量。并且给他们赋有值。
aa='789';
bb='123';
要求:cc等于 将字符型的aa转换成数字型后 减去 将字符型的bb转换成数字型后的差再 从数字型转换成字符型将赋给cc。
我在Delphi中是这样写的。
cc:=floattostr(strtofloat(aa)-strtoflaot(bb));
但在VC中我就不会写的。且我的aa或bb有可能有十多位长。故需要用长整型!!
谢谢!
 
VC?好久没用了,是不是有个VAL函数,其实,
你去查一下VC的再线帮助就可以了。
 
chnplzh兄,
 
chnplzh兄,
我就是搞不懂嘛。我手头上又没有一本书。现在又急着要处理。所以我也是万不得已啊!
就麻烦你帮试试。试着将Delphi中的:
cc:=floattostr(strtofloat(aa)-strtoflaot(bb));
改到VC中。好吗>?我真的很急啊!!
 
VC中有個字符轉數值的函數的﹐具體忘了什么函數﹐但是操作比delphi麻煩多了﹐或者你可以用delphi做一個dll﹐可以實現字符轉換數值的﹐那樣﹐再在vc++中調用函數﹐也是一個辦法。
 
在vc++中:
cc = STR(VAL(aa) - VAL(bb));
 
对atol,标准C函数。
 
zhukewen兄,
VC中没有STR和VAL这两个函数啊。
 
花了一点时间,到WWW.CSDN.NET搜索了一下,
是使用以下函数atoi,atol,atof,其它的只能
靠你自己去查询了。
详细参见:
http://expert.csdn.net/Expert/topic/1439/1439004.xml?temp=.4842798
 
TO:一少;sgzc
当然尝试这样操作时。系统反回没有STR函数啊!
cc= STR(atoi(aa)-atoi(bb));
那我又该怎么办?
 
atoi可以接受多大的数据。我的数据有可以有
999999999999
这么大的。atoi行吗?
 
cc.Format("%d",atoi(aa)-atoi(bb))
 
比较大的数用_atoi64
 
你為何不試試呢﹖為何一定要人家說爛了呢﹖
 
哎,我帖了吧
atoi,atof,aotl是一系列将字符串类型转换成整型,浮点型,长整型的函数,具体看帮助
我使用了一种实现方法,虽然比较麻烦,但应该更容易自己控制
CString cc,cstmp;
char aa[5]="789";
char bb[5]="123";
cc="";
int iReslt,iMod,iTmp,iStrlen,iCount,iaa,ibb;

iaa=0;
ibb=0;
iStrlen=strlen(aa);
for (iCount=0 iCount<iStrlen iCount++)
{
switch (aa[iCount]) {
case '0':iaa=iaa*10+0;break;
case '1':iaa=iaa*10+1;break;
case '2':iaa=iaa*10+2;break;
case '3':iaa=iaa*10+3;break;
case '4':iaa=iaa*10+4;break;
case '5':iaa=iaa*10+5;break;
case '6':iaa=iaa*10+6;break;
case '7':iaa=iaa*10+7;break;
case '8':iaa=iaa*10+8;break;
case '9':iaa=iaa*10+9;break;
}
}
iStrlen=strlen(bb);
for (iCount=0 iCount<iStrlen iCount++)
{
switch (bb[iCount]) {
case '0':ibb=ibb*10+0;break;
case '1':ibb=ibb*10+1;break;
case '2':ibb=ibb*10+2;break;
case '3':ibb=ibb*10+3;break;
case '4':ibb=ibb*10+4;break;
case '5':ibb=ibb*10+5;break;
case '6':ibb=ibb*10+6;break;
case '7':ibb=ibb*10+7;break;
case '8':ibb=ibb*10+8;break;
case '9':ibb=ibb*10+9;break;
}
}
iReslt=iaa-ibb;
while (iReslt>0 )
{
iTmp=iReslt;
iReslt=iReslt/10;
iMod=iTmp%10;
switch (iMod ){
case 0:cstmp=48;cc += cstmp;break;
case 1:cstmp=49;cc += cstmp;break;
case 2:cstmp=50;cc += cstmp;break;
case 3:cstmp=51;cc += cstmp;break;
case 4:cstmp=52;cc += cstmp;break;
case 5:cstmp=53;cc += cstmp;break;
case 6:cstmp=54;cc += cstmp;break;
case 7:cstmp=55;cc += cstmp;break;
case 8:cstmp=56;cc += cstmp;break;
case 9:cstmp=57;cc += cstmp;break;
}
}
MessageBox(cc);
其中两个FOR循环可以包装成带参数的字符串型转换成整型的函数,
WHILE循环可以包装成带参数的整形转换成字符串的函数
把上面代码加入一个按钮事件中就可以了。
给分?
 
谢谢各位的参与。多谢!
TO:sgzc
谢谢你的答案,以至我在非常短的时间里完成了工作。多谢!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
S
回复
0
查看
774
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部