当前位置:  开发笔记 > 前端 > 正文

确定字符串是ANSI C中的整数还是浮点数

如何解决《确定字符串是ANSIC中的整数还是浮点数》经验,为你挑选了2个好方法。

仅使用ANSI C,以公平的确定性确定C样式字符串是整数还是实数(即float/double)的最佳方法是什么?



1> Patrick_O..:

不要使用atoi和atof,因为这些函数在失败时返回0.上次我检查0是一个有效的整数和浮点数,因此没有用于确定类型.

使用strto {l,ul,ull,ll,d}函数,因为这些函数在失败时设置errno,并且还报告转换数据的结束位置.

strtoul:http://www.opengroup.org/onlinepubs/007908799/xsh/strtoul.html

此示例假定该字符串包含要转换的单个值.

#include 

char* to_convert = "some string";
char* p = to_convert;
errno = 0;
unsigned long val = strtoul(to_convert, &p, 10);
if (errno != 0)
    // conversion failed (EINVAL, ERANGE)
if (to_convert == p)
    // conversion failed (no characters consumed)
if (*p != 0)
    // conversion failed (trailing data)

感谢Jonathan Leffler指出我忘了先将errno设置为0.



2> Patrick..:

使用sscanf,您可以确定字符串是浮点数还是整数或其他没有特殊情况0的情况,就像atoi和atof解决方案一样.

这是一些示例代码:

int i;
float f;
if(sscanf(str, "%d", &i) != 0) //It's an int.
  ...
if(sscanf(str "%f", &f) != 0)  //It's a float.
  ...

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有