从C字符串中提取“整数”和“十进制”?

时间:2012-10-24 01:34:01

标签: c string

如何将字符串或中断字符串转换为最初在C中包含小数的两个部分。我必须逐位解析这个数字..

char s[] = "2.03";
// -->
double a = 2;
double b = 0.03;

3 个答案:

答案 0 :(得分:2)

这是一个简单的方法吗?

#include <stdlib.h> /* you need this header for conversion functions */
char s[] = "2.03";
double a = (int)atoi(s);
double b = atof(s)-a;

好的。不使用简单的功能(只有pow和strlen功能)。

#include <stdio.h>
#include <math.h>

int main()
{
  char s[] = "2.03";
  double a = 0,b = 0;
  int i,n = 0;
  char d = 0;
  for(i = 0; i < strlen(s); i++) /* don't want strlen? for(i = 0; s[i] != '\0'; i++) */
  {
    if(d == 1)
    {
      b += (s[i]-'0')/(pow(10,++n)); /* don't want pow? make the function w/ a loop */
    }
    else if(s[i] == '.')
      d = 1;
    else
    {
      a *= 10;
      a += s[i]-'0'; /* convert chars to numbers */
    }
  }
  printf("%f %f",a,b);
  return 0;
}

答案 1 :(得分:2)

使用strtodmodf

#include <stdlib.h>
#include <math.h>

double d = strtod(s, NULL);
double a;
double b = modf(d, &a);

答案 2 :(得分:0)

那么类似于以下功能呢。

void makeTwoPieces (char *str, double *dMost, double *dLeast)
{
  double  dMultiplier;
  *dMost = *dLeast = 0.0;

  for (; *str; str++) {
    if (*str == '.') {
        break;
    } else if (*str >= '0' && *str <= '9') {
       *dMost *= 10;
       *dMost += (*str - '0');
    }
  }
  dMultiplier = 1.0;
  for (; *str; str++) {
    if (*str >= '0' && *str <= '9') {
       dMultiplier /= 10;
       *dLeast += (*str - '0') * dMultiplier;
    }
  }
}

然后您可以在以下测试工具中使用此功能:

int main(int argc, char * argv[])
{
    double d1, d2;
    char *str = "2.03";
    makeTwoPieces (str, &d1, &d2);
    return 0;
}