0

文字列を変換したり、C で最初に小数点を含む 2 つの部分に文字列を分割したりするにはどうすればよいですか。この数字を数字ごとに解析する必要があります。

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

3 に答える 3

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;
}
于 2012-10-24T01:37:19.670 に答える
2

とを使用strtodmodfます。

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

double d = strtod(s, NULL);
double a;
double b = modf(d, &a);
于 2012-10-24T01:38:01.450 に答える
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;
}
于 2012-10-24T02:00:23.020 に答える