设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1247|回复: 9
打印 上一主题 下一主题

字符窜转换为浮点数

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 02:06:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream.h>
#include<string.h>
void main()
{
char *number,s[8];
int data[8];
cout<<"Input String:";
number=s;
cin>>number;
int len=strlen(number);
for(int i=0;i<len;i++)
{
data[i]=(*number)-'0';
number++;
}
for(int k=0;k<len;k++)
cout<<data[k];
cout<<endl;
}
这个程序只能将字符窜转换为整数,如果要转换为浮点数,应该怎么弄呢?
特别是那个小数点应该怎么样转换呢?
2#
发表于 2009-11-3 02:06:50 | 只看该作者
#include<iostream.h>
#include<string.h>
void main()
{
char *number,s[8];
cout<<"Input String:";
number=s;
cin>>number;
float f = atof(number);
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 02:06:51 | 只看该作者
c++里面有相应的函数。
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 02:06:52 | 只看该作者
我不想用函数,希望能够通过代码实现,而不是用已有的函数
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 02:06:54 | 只看该作者
int main(int argc, _TCHAR* argv[])
{
char *pCurrent,sNumber[20];
float fData = 0.0, fFloatPart = 0.0;
bool bNegative = false;
cout<<"Input String:";
cin>>sNumber;
pCurrent = sNumber;
if (*pCurrent == '-')
{
bNegative = true;
pCurrent++;
}
else if (*pCurrent == '+')
pCurrent++;
for (; pCurrent != NULL; pCurrent++)
{
if (*pCurrent == '.')
{
fFloatPart = (float)0.1;
pCurrent++;
}
else if (!isdigit(*pCurrent))
break;
if (!fFloatPart)
fData = fData * 10 + (*pCurrent - '0');
else
{
fData += (*pCurrent-'0') * fFloatPart;
fFloatPart *= (float)0.1;
}
}
if (bNegative)
fData *= -1;
cout << endl << fData << endl;
return 0;
}
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 02:06:55 | 只看该作者
老兄,if (!isdigit(*pCurrent))这句话是什么意思啊?
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 02:06:56 | 只看该作者
isdigit(char a)判断a 是不是数字字符,等于 return (a <= '9' && a >= '0')
别的就明白了吧?
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 02:06:57 | 只看该作者
老兄,能不能把你的解题思路说说呢?我不是很清楚这些算法!谢谢!
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 02:06:59 | 只看该作者
//我这里没有把正负也加进去,只是思路
//把他当整数处理,然后看从小数点到字符串结束有多少位数,就乘以多少
//个0.1,因为前面是把小数点忽略计算的,这里补充回来
#include <iostream>
#include <string>
using namespace std;
float m_sTof(string s);
int main()
{
cout<<"string:";
string str;
cin>>str;
cout<<endl<<m_sTof(str)<<endl;
system("pause");
return 0;
}
float m_sTof(string s)
{
float x=0;
int f=s.find('.');
for(int i=0;i<s.length();i++)
{
if(isdigit(s[i])){x*=10;x+=(s[i]-'0');}
}
if(f<0)return x;
else
{
for (int i=s.length()-f-1;i;i--)
{
x*=0.1;
}
return x;
}
}
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-3 02:07:00 | 只看该作者
以下是引用lw8484654在2006-5-18 22:02:00的发言:

老兄,能不能把你的解题思路说说呢?我不是很清楚这些算法!谢谢!
先查第一个字符是不是加减号,然后看每个字符,如果是数字就把已经有的结果乘10再加上这个数字,如果是小数点就记下开始小数部份计算,以后碰见数字就把新数字除10灾加进去,如果是其它字符就停止。
回复 支持 反对

使用道具 举报

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

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 06:23 , Processed in 0.106416 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表