Перевод double в строку символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать функцию для преобразования переменной типа double в строку символов с заданной точностью представления ( dtoa( double num, int npos, int nfr ) ) Попытался сохранить запятую привести к int и дальше через itoa, ничего не получается. помогите пожалуйста.
/* Написать функцию для преобразования переменной типа double
   в строку символов с заданной точностью представления
   ( dtoa( double num, int npos, int nfr ) ) */
 
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
 
#define MASS = 20;
 
void dtoa(double num, char s[]);
void reverse(char s[]);
 
void main()
{
    int i;
    double num;
    char s[MASS];
    printf("Vvedite chislo tippa double: \n ");
    scanf("%f", &num);
    dtoa(num, s);
    printf("chislo: ");
    for(i = 0; i < MASS; i++){
        printf("\t", s[i]);
    }
}
 
void dtoa(double num, char s[])
{
    int i, sign, zap;
    if ((sign = num) < 0)
        num = -num;
    while( (num % 10)==0){  // запоминаем запятую, и приводим к фун-ии itoa
        num*=10;
        zap++;
    }
    i = 0;
    do{
        s[i++] = num % 10 + '0';
    }while((num /= 10) > 0);
    if( sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    reverse(s);
    for(i = MASS; i > 0; i--){
        while(s[zap] != ','){
            s[i] = s [i-1];
            s[i-1] = ',';
        }
    }

}
 
void reverse(char s[])
{
    int i,c,j;
    for (i=0, j=strlen(s)-1; i<j; i++, j--){
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}
видимо никто не может понять, как это делать...

Решение задачи: «Перевод double в строку символов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
//-----------------------------------------------------------------------------
void Swap(char* a, char* b)
{
   char tmp = *a;
   *a = *b;
   *b = tmp;
}
//-----------------------------------------------------------------------------
char* reverse(char* str)
{
   char* begin = str;
   char* end = str;
 
   for (; *end; ++end) { ; }
 
   for (--end; begin < end; ++begin, --end)
   {
      Swap(begin, end);
   }
 
   return str;
}
//-----------------------------------------------------------------------------
char* IntToAnsi(int dig, char str[], size_t len)
{
   int i = 0;
 
   while (dig && (i < len - 1))
   {
      str[i++] = (dig % 10) + '0';
      dig /= 10;
   }
 
   if ((i == 0) && (i < len))
   {
      str[i++] = '0';
   }
 
   str[i] = '\0';
 
   reverse(str);
 
   return str;
}
//-----------------------------------------------------------------------------
char* DoubleToAnsi(double dig, size_t acc, char str[], size_t len)
{
   int hi = (int) dig;
   int lo = (dig - hi) * pow(10, acc);
   char* pstr = str;
 
   IntToAnsi(hi, pstr, len);
 
   if (lo)
   {
      for (; *pstr; ++pstr) { ; }
 
      *pstr++ = ',';
      IntToAnsi(lo, pstr, len - (pstr - str));
   }
 
 
   return str;
}
//-----------------------------------------------------------------------------
 
int main()
{
   char str[20];
 
   printf("%s\n", DoubleToAnsi(12345.12345, 10, str, sizeof(str)));
   printf("%s\n", DoubleToAnsi(0, 6, str, sizeof(str)));
   printf("%s\n", DoubleToAnsi(123, 6, str, sizeof(str)));
   printf("%s\n", DoubleToAnsi(0.1, 6, str, sizeof(str)));
 
   return 0;
}

Объяснение кода листинга программы

  1. В функции reverse() происходит перестановка символов в строке, начиная с первого и последнего символа, чтобы получить строку в обратном порядке.
  2. Функция IntToAnsi() преобразует целое число в строку, используя символы от '0' до '9'. Если число больше 9, то оно разбивается на части и преобразуется в строку с использованием функции reverse().
  3. Функция DoubleToAnsi() преобразует дробное число в строку, разбивая его на целую и дробную части. Сначала преобразуется целая часть числа, затем, если дробная часть не равна нулю, добавляется запятая и преобразуется дробная часть числа.
  4. В функции main() создается массив символов str, который используется для хранения преобразованных чисел.
  5. Затем вызывается функция DoubleToAnsi() для преобразования чисел 12345.12345, 0, 123, 0.1 и сохранения результата в массиве str.
  6. Результат выводится на экран с помощью функции printf().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.462 из 5
Похожие ответы