//============================================================
//
week 8, 额外的:如何将字符串转化为一个浮点数
//
atof_s(...)
//
如 “-12.345” -> 12.345
//
"FF" -> 255 ( 16进制)
//
//
本程序不靠虑0x之类的数据标示头!
//
X. Zhang, SEU
//============================================================
#include
#include
using namespace std;
#define IS_DOT(c)
(c == '.')
#define IS_DIGIT(c)
((c>='0') && (c<='9'))
#define IS_DIGIT_EX_BIG(c)
((c>='A') && (c<='F'))
#define IS_DIGIT_EX_SMALL(c) ((c>='a') && (c<='f'))
#define VALID_CHAR(c)
(
IS_DIGIT(c) || \
inline bool CharToN(int& digit, const char c,int JINGZHI=10)
{
if(JINGZHI <=0 )
{
}
if(IS_DIGIT(c))
{
}
else if(IS_DIGIT_EX_BIG(c))
{
}
else if(IS_DIGIT_EX_SMALL(c))
{
}
else
{
return false;
}
if(( digit >= 0) && ( digit < JINGZHI))
{
}
return false;
}
int strlen_s(const char* s) // our version of strlen
{
}
//============================================================
// 调用这个函数,将"12345" -> 0.12345
//
将"789"
-> 0.789
//
将"0098"
-> 0.0098
//
本函数是辅助函数,是为了atof_s()碰到小数点后
//
处理后面的所有字符
//============================================================
double fraction_value(const char* s,int JINGZHI=10)
{
}
//=====================================================
// transfer to a double data
//
为了简化逻辑,里面用了goto
//====================================================
double atof_s(const char s[],int JINGZHI = 10)
{
int N = strlen_s(s);
int digit = 0;
bool if_minus =0;
bool sign_handled = false;
// if we have handled +/-
for(int i = 0; i < N; i ++)
{
if(!sign_handled)
{
switch(s[i])
{
case ' ':
case '\t':
case '\n':
case '\r':
break;
case '+':
if_minus = false;
sign_handled = true;
break;
case '-':
if_minus = true;
sign_handled = true;
break;
default:
{
if_minus = false;
sign_handled = true;
i --; // we do not handle it in this logic, so i--
}
else
{
// bad char now, we can quit!
goto EXIT;
}
}
}
else if(IS_DOT(s[i]))
{
// 只要碰到小数点,后面的计算全部在下面这个函数中进行
break;
}
else
{
{
}
else
{
}
}
}
EXIT:
if(if_minus)
{
}
return sum;
}
int main()
{
}
//