Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Преобразование double строку типа char[]


Автор: Hawaii 15.7.2007, 20:26
Как преобразовать число double в строку char[] ?

Автор: Dov 15.7.2007, 21:10
sprintf, gcvt...

Автор: Doc_d0s 15.7.2007, 21:26
ftoa();

Автор: archimed7592 15.7.2007, 22:01
std::istringstream

Добавлено @ 22:02
boost::lexical_cast

Автор: Hawaii 15.7.2007, 23:40
Я не могу понять, как эти функции использовать. А какой заголовочный файл подключать?

Вот пример. В нем есть метод formating(), который разбирает строку типа $1,234,567,890,123.99 ...
Он удаляет из этой строки запятые и знак доллара. Затем переводит строку из типа char[] в тип double.
Потом умножает результат на 2 (это для подтверждения того, что строка действительно стала double).

Помогите пожалуйста написать метод idtoms(), где double будет переводиться в char[] (БЕЗ ЗНАКА ДОЛЛАРА И ЗАПЯТЫХ).

Вот код:

Код


#include<iostream>
#include<stdlib.h>
#include<cstring>


using namespace std;
int j;
int f;
int u = 0;
int p = 0;
char D;
class money
  {
  private:
    char monV[80];
    char monX[80];
  public:
      
   void formating(char M[])
     { 
      for(j=0; j<strlen(M);)
         {
           while (M[j] == '$')
            {
            j++;
            }
          monV[u] = M[j];  
           u++;
           j++;
         }
      monV[u] = '\0';
      for(f=0; f<strlen(monV);)
         {
           while (monV[f] == ',')
            {
            f++;
            }
          monX[p] = monV[f];  
           p++;
           f++;
         }
      monX[p] = '\0';
   
       double n = atof(monX);  
      cout << n*2;
     }   
   void idtoms()
     {
       //??????????
       //??????????
       //??????????      
     }  

  };
int main()
{
money m1;
char money[100];
cout << "ENTER SUM $1,234,567,890,123.99 (THIS FORMAT)"<< endl;
cin >> money;
m1.formating(money);
cout << endl;
system("PAUSE");
return 0;
}



 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 

Автор: JackYF 16.7.2007, 00:32
Цитата(Hawaii @  15.7.2007,  23:40 Найти цитируемый пост)
Помогите пожалуйста написать метод idtoms(), где double будет переводиться в char[] (БЕЗ ЗНАКА ДОЛЛАРА И ЗАПЯТЫХ).

тебе выше уже привели 5(!) методов. Как пользоваться - подробно описано в справке/манах/гугле.

Автор: Hawaii 16.7.2007, 00:39
Я типа только начинающий, и куда эти 5(!) методов пихать я тоже не очень понимаю. Так что кому не впадлу, впишите в код что надо.

Автор: JackYF 16.7.2007, 01:01
Цитата(Hawaii @  16.7.2007,  00:39 Найти цитируемый пост)
Так что кому не впадлу, впишите в код что надо.


Ну, например, так:
Код

#include <stdio.h>
#include <stdlib.h>
int main()
{
    double d = 123.45;
    char buf[20];
    sprintf(buf, "%f", d);
    printf("%s", buf);
    return 0;
}

Здесь в 3-й строчке строковое представление переменной d пишется в переменную buf.

Автор: Hawaii 16.7.2007, 01:28
Спасибо. Все работает. Только я ещё не знаю что такое "%f" и "%s"  smile  smile  smile 

Автор: archimed7592 16.7.2007, 01:36
Цитата(Hawaii @  16.7.2007,  01:28 Найти цитируемый пост)
Только я ещё не знаю что такое "%f" и "%s"

Не заморачивайся... Это наследие языка C smile.
Код

#include <string>
#include <ostream>
#include <sstream>
#include <iostream>

int main()
{
    double d = 123.45;
    std::ostringstream oss;
    oss << d; // работать с ним можно точно так же, как со всеми любимым cout
    // только вывод будет делать не на экран, а во внутренний буфер.
    std::string s = oss.str(); // содержимое буффера можно получить вот так.
    std::cout << s << std::endl;

    return 0;    
}



Добавлено через 5 минут и 12 секунд
ps. Если нужно получить именно char [], то это можно сделать так:
Код

#include <cstring>
//...
std::string s = oss.str();
//...
char charbuf[100];
strncpy(charbuf, s.c_str(), 99);
charbuf[99] = '\0';

Автор: bsa 16.7.2007, 10:13
Цитата(Hawaii @ 16.7.2007,  01:28)
Спасибо. Все работает. Только я ещё не знаю что такое "%f" и "%s"  smile  smile  smile

http://linux.die.net/man/3/sprintf

И вообще, google хорошо подходит для поиска документации. В частности, на стандартные функции достаточно дать запрос вида: man <что-то>. Например: man sprintf или man ftoa. Учись пользоваться интернетом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)