Преобразование строки, чтобы плавать (без atof) в C - PullRequest
9 голосов
/ 09 декабря 2010

Я разрабатываю функцию, которая преобразует строку в число с плавающей точкой. например "45,5" = 45,5

Пока у меня есть это. Но это не похоже на работу. Имейте в виду, что мы не можем использовать никакие функции библиотеки C, такие как atoi, atof или даже pow в этом отношении.

int str2float( char *s )
{
    int num = 0;
    int dec = 0;
    double i = 1.0;
    int ten = 1;
    /***** ADD YOUR CODE HERE *****/

    for(; *s != '\0'; s++)
    {
        if (*s == '.'){
            for(; *s != '\0'; s++){
                dec = (dec * CONT) + (*s - '0');
                i++;
            }
        }else{
            num = (num * CONT) + (*s - '0');
        }

    }
    for(;i!=0;i--){
        ten *= 10;
    }
    dec = dec / (ten);
    printf("%d", dec);
    num += dec;
    return num;  
}

Ответы [ 11 ]

0 голосов
/ 09 декабря 2010

примерно так должно это сделать:

float str2float(char* s){
// solve for special cases where s begins with 0's or nun numeric values, or if s is NULL
  float result = 0;
  int decimalCount = 0, i = 0, decimalPointLoc = strlen(s);
  for (; s[i] != '\0'; i++){
    if (s[i] == '.') decimalPointLoc = i;
    if (i < decimalPointLoc) { result *= 10; result += (int)(s[i] + '0'); }
    else { result += (float)(s[i] + '0')/(pow(i-decimalPointLoc,10)); }
  }
  return result;
}

Код может быть не очень чистым и не обязательно лучшим способом сделать это, но вы поняли идею. pow (x, y) возвращает x ^ y и требует math.h, а strlen (s) возвращает размер s и требует string.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...