数值字符串转化为真实数值

/******************************************************************************

** 文件名称:StrToData.h

** 作    者:罗振

** 完成日期:2009-9-24

******************************************************************************/
#include<iostream>
#include<string>
#include<cmath>
using namespace std;

// 有效字符
const char usechar[] = {'0','1','2','3','4','5','6','7','8','9','.'};

double calculate(const char disstr[]);    /* 数据字符串转化数据           */
bool isusefuldata(const char distr[]);    /* 判断数据字符串是否有效       */
int calpartofint(const char disint[]);    /* 计算字符串数据整数部分       */
double calpartofdou(const char disdou[]); /* 计算字符串数据小数部分       */

int main(void)
{
    char datastr[] = "2009.09";
 if(isusefuldata(datastr))
 {
  cout<< "转化的结果为:" << calculate(datastr) <<endl;
 }else{
  cout<< "输入的数据不是有效数据!" <<endl;
 }
 return 0;
}

/*
 * 函数名: isusefuldata()
 * 参  数: distr:数据字符串
 * 描  述: 判断目标字符串是否为数据字符串
 * 返  回: true:是 false:否
 */
bool isusefuldata(const char distr[])
{
 bool flag = true;

    short int chlen  = sizeof(usechar);
 short int dislen = strlen(distr); /* 注意sizeof与strlen的区别 */
 short int i = 0;
 short int sumdo = 0;    /* 统计数据字符串中'.'的个数 */

 /* 判断数据字符串第一个字符是否为'.',是则返回false,说明该数据字符串无效.  */
    if(distr[0] == '.' || distr[dislen-1] == '.')
  return false;

 /* 判断数据字符串是否存在无效字符.                                        */
    for(short int j=0;j<dislen;j++)
 {
  if(distr[j] == '.')
   sumdo++;

  for(i=0;i<chlen;i++)
  {
   if(distr[j] == usechar[i])
    break;
  }
  if(i == chlen)
  {
   return false;
  }
 }
   
 /* 当数据字符串中出现两次以上'.'字符时,该数据字符串仍然无效 */
 if(sumdo > 1)
  return false;

 return flag;
}

/*
 * 函数名: calculate()
 * 参  数: disstr:数据字符串
 * 描  述: 将数据字符串转化为数据
 * 返  回: 转化的结果
 */
double calculate(const char disstr[])
{
    char intchar[20] = "0"; /* 保存数据字符串的整数部分,初始值为"0" */
 char douchar[20] = "0"; /* 保存数据字符串的小数部分,初始值为"0" */
 
 short int inlen = strlen(disstr);
 short int sp = inlen; /* 小数点所在位置 */
    short int dousp = 0;
 short int i;

 for(i=0;i<inlen;i++)
 {
  if(disstr[i] == '.')
  {
   sp = (i+1);
   break;
  }
 }

 /* 说明该数据字符串中整数部分和小数部分分割 */
 for(i=0;i<(sp-1);i++)
  intchar[i] = disstr[i];
 intchar[i] = '/0';

 if(sp != inlen)
 {
  for(i=sp;i<inlen;i++)
  {
   douchar[dousp++] = disstr[i];
  }
  douchar[dousp] = '/0';
 }

 return (sp == inlen ? (calpartofint(intchar)):
               (double(calpartofint(intchar)) + calpartofdou(douchar)));
}

/*
 * 函数名: calpartofint()
 * 参  数: disint:数据字符串整型部分
 * 描  述: 将数据字符串整数部分转化为整型数据
 * 返  回: 转化的结果--整型数据
 */
int calpartofint(const char disint[])
{
 short int i = 0;
 short int inlen = strlen(disint); /* 整数部分长度 */

 int sumin = 0;

 for(i=0;i<inlen;i++)
  sumin = sumin*10 + (disint[i] - '0');

 return sumin;
}

/*
 * 函数名: calpartofdou()
 * 参  数: disdou:数据字符串小数部分
 * 描  述: 将数据数据字符串小数部分转化为双精度型数据
 * 返  回: 转化的结果--双精度型数据
 */
double calpartofdou(const char disdou[])
{
 short int i = 0;
 short int doulen = strlen(disdou); /* 小数部分长度 */

 double sumdou = 0.0;

 for(i=0;i<doulen;i++)
  sumdou = sumdou + (disdou[i]-'0') * (1.0 / pow(10,(i+1)));

 return sumdou;
}

 

声明:本文源代码所有权归博主所有,其他人不得以任何性质转载,否则将追究责任.

时间: 2024-10-03 10:46:26

数值字符串转化为真实数值的相关文章

javascript-js中字符串转化为数值的情况,js代码如下

问题描述 js中字符串转化为数值的情况,js代码如下 var str="123abc"; alert(typeof(str++));//number alert(str);//NAN ```为什么会输出这种结果 解决方案 js执行String js将字符串转化为代码将html代码转换成js字符串的小工具 解决方案二: NAN是非数字的意思,在js中是NaN是一种特殊的number.但表示非数字的意思. var str="123abc"; alert(typeof(s

C#字符串转float时数值改变

问题描述 C#字符串转float时数值改变 string a = "497074.73"; float b = Convert.ToSingle(a); b=497074.719 为什么数值改变了? 解决方案 浮点数有一个精度的问题,但也不应该变化如此大,如果是 b=497074.729 还能理解,但是 b=497074.719 就不能理解了. 是不是输入错误 了??? 解决方案二: http://wenku.baidu.com/link?url=XdOkL9awOBi5SHPhFuS

cstring-MFC对话框串口编程中转化组合框数值类型

问题描述 MFC对话框串口编程中转化组合框数值类型 实现在对话框类设置串口参数并连接串口,现在在校验位对应的组合框里添加了数据N/E/O,分别表示无校验,奇校验,偶校验 int index=m_ctrlParity.GetCurSel(); m_ctrlParity.GetLBText(index,m_strParity); 这里得到的数据类型m_strParity是CString型,但在打开串口时,用到的数据是char型,怎么转化得到呢?网上都是CString转Char _* 解决方案 CSt

VC Afx全局函数  数据类型 字符串转化函数

转自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1652126 Afx全局函数及MFC常见数据类型AfxBeginThread:开始一个新的线程 AfxEndThread:结束一个旧的线程 AfxFormatString1:类似printf一般地将字符串格式化 AfxFormatString2:类似printf一般地将字符串格式化 AfxMessageBox:类似Windows API 函数 MessageBox AfxOuputDebugSt

js字符串转化为日期及日期判断大小

//将字符串转换为日期  var begin=new Date($("#begin").val().replace(/-/g,"/"));  var end=new Date($("#end").val().replace(/-/g,"/"));  //js判断日期  if(begin-end>0){      alert("开始日期要在截止日期之前!");        return false; 

js中如何把字符串转化为对象、数组示例代码

在本文为大家介绍下把字符串转化为对象:把文本转化为对象.把文本转化为数组,具体实现如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助   例如 复制代码 代码如下: var test='{ colkey: "col", colsinfo: "NameList" }' 很明显是一个对象,但如何把文本转为对象呢.使用eval();注意一定要加括号,否则会转换失败 把文本转化为对象 复制代码 代码如下: var test='{ colkey: "col"

typeof-C# 字符串转化枚举 问题

问题描述 C# 字符串转化枚举 问题 (枚举类型)Enum.Parse(typeof(枚举类型)1"") 和 (枚举类型)int.Parse(""1"") 对比来说 哪种的运行效率高? 解决方案 都使用了"Parse",感觉效率应该基本一样. 解决方案二: (枚举类型)int.Parse(""1"") 解决方案三: 两者效率一样.强制类型转换在编译期间完成,不会增加执行.前者的优势在于类

kinect采集的深度png图,如何将png图中的数据转化为真实的距离数据?

问题描述 kinect采集的深度png图,如何将png图中的数据转化为真实的距离数据? kinect采集的深度png图,如何将png图中的数据转化为真实的距离数据? 解决方案 深度png本身就是深度数据 参考:http://blog.csdn.net/yongshengsilingsa/article/details/37935975

js 把字符串转化为数组对象

js 中如何把一个普通的字符串转化为数组对象呢? 例如: Js代码   var jsonStr='[ 1,2, 3 ,"whuang" ]';    如何把jsonStr转化为Array对象呢? 我自己写了一个js方法来实现这个功能 Js代码   function string2Array(stringObj) {       stringObj = stringObj.replace(/\[([\w, ]*)\]/, "$1");       if (string