标题:字符窜转换为浮点数
只看楼主
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
 问题点数:0 回复次数:12 
字符窜转换为浮点数
#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;
}
这个程序只能将字符窜转换为整数,如果要转换为浮点数,应该怎么弄呢?
特别是那个小数点应该怎么样转换呢?
搜索更多相关主题的帖子: 点数 字符 include void string 
2006-05-17 11:39
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
#include<iostream.h>
#include<string.h>
void main()
{
char *number,s[8];
cout<<"Input String:";
number=s;
cin>>number;
float f = atof(number);
}

http://myajax95./
2006-05-17 13:29
ot1122
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-4-20
得分:0 

c++里面有相应的函数。

2006-05-17 15:20
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
得分:0 
我不想用函数,希望能够通过代码实现,而不是用已有的函数
2006-05-17 18:26
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 

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;

}


http://myajax95./
2006-05-18 07:36
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
得分:0 

老兄,if (!isdigit(*pCurrent))这句话是什么意思啊?

2006-05-18 13:09
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
isdigit(char a)判断a 是不是数字字符,等于 return (a <= '9' && a >= '0')
别的就明白了吧?

http://myajax95./
2006-05-18 15:11
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
得分:0 

老兄,能不能把你的解题思路说说呢?我不是很清楚这些算法!谢谢!

2006-05-18 22:02
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

//我这里没有把正负也加进去,只是思路
//把他当整数处理,然后看从小数点到字符串结束有多少位数,就乘以多少
//个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;
}
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-18 22:50
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
以下是引用lw8484654在2006-5-18 22:02:00的发言:

老兄,能不能把你的解题思路说说呢?我不是很清楚这些算法!谢谢!

先查第一个字符是不是加减号,然后看每个字符,如果是数字就把已经有的结果乘10再加上这个数字,如果是小数点就记下开始小数部份计算,以后碰见数字就把新数字除10灾加进去,如果是其它字符就停止。


http://myajax95./
2006-05-18 23:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-64907-1-1.html




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

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