Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
AKE
11 / 11 / 0
Регистрация: 09.05.2010
Сообщений: 384
#1

Ищу код перевода числа в строку и назад... - C++

09.02.2012, 22:27. Просмотров 1773. Ответов 21
Метки нет (Все метки)

itoa и atoi не подходят...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2012, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ищу код перевода числа в строку и назад... (C++):

Алгоритм перевода шестнадцатеричного числа в десятичный код - C++
помогите написать программу "алгоритм перевода шестнадцатиличного числа в десятичный код"

Есть ли более удобный способ перевода переменную в строку? - C++
Всем привет, начнем: Есть переменная(которая может быть и переменной и строкой): int fps = 150; есть функция void...

Программа перевода числа из 10 СС в 2 СС - C++
У Дейтлов есть задача: Они предлагают следующие инструкции по переводу чисел: 10 СС -> 2 СС 10 СС -> 8 СС

Перевод перевода целого числа - C++
Суть такая: Имеется целое число(цифра), его надо преобразовать в символ(2 в '2'), а затем получить его код('2' в 50). Если это можно...

Программа для перевода числа - C++
Не могу написать программу для перевода числа, введенного пользователем из P -ичной системы счисления в Q -ичную и обратно. Предусмотреть...

Ввести в программу строку (числа, латиница), считать только числа, записать числа в массив - C++
Нужна помощь! Срочно! Нужно ввести в программу строку (числа, латиница), считать только числа, записать числа в массив. Помогите,...

21
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.02.2012, 22:45 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sstream>
#include <iostream>
 
int main()
{
    std::string s("10.66");
    double num;
    std::stringstream ss;
    ss << s;
    ss >> num;
    ss.clear();
    std::cout << "num returns "<< num << std::endl;;
    num = 100.9;
    ss << num;
    ss >> s;
    std::cout << "s returns "<< s << std::endl;
    return 0;
}
2
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 10:44 #3
Цитата Сообщение от AKE Посмотреть сообщение
itoa и atoi не подходят...
- пробуй
C++
1
2
3
4
5
6
7
8
char buf[32];
int val;
cout<<"Enter number : ";
cin>>val;
sprintf(buf,"%d",val);
int ret;
sscanf(buf,"%d",&ret);
cout<<ret<<endl;
для работы необходимо подключить <stdio.h> для Си и <cstdio> для С++ и не городи велосипед с использованием stringstream...
0
Bers
Заблокирован
10.02.2012, 10:51 #4
Юра, сложность в том, что sscanf оперирует целыми, либо float.
Он не умеет работать с double. Из-за этого досадного обстоятельства, не всегда подходит.
А для float, всякие специализированные atof работают быстрее, чем универсальный sscanf
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 10:52 #5
Вот и сам код, его достоинство в том что без особых изменений им можно пользоваться как в Си так и С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdio>
using namespace std;
 
int main()
{
    int iVal;
    double dVal;
    char buf[256];
    cout<<"Enter integer : ";
    cin>>iVal;
    cout<<"Enter double  : ";
    cin>>dVal;
    sprintf(buf,"%d %lf",iVal,dVal);
    cout<<"String : "<<buf<<endl;
    iVal = 0;
    dVal = 0;
    sscanf(buf,"%d %lf",&iVal,&dVal);
    cout<<"GetVal :\n"
        <<"integer : "<<iVal<<endl
        <<"double  : "<<dVal<<endl;
    system("pause");
    return 0;
}
0
Миниатюры
Ищу код перевода числа в строку и назад...  
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 10:55 #6
Цитата Сообщение от Bers Посмотреть сообщение
Юра, сложность в том, что sscanf оперирует целыми, либо float.
Он не умеет работать с double. Из-за этого досадного обстоятельства, не всегда подходит.
А для float, всякие специализированные atof работают быстрее, чем универсальный sscanf
- да неужели???
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
sprintf(buf,"%d %lf",iVal,dVal);
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
sscanf(buf,"%d %lf",&iVal,&dVal);
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 11:00 #7
Bers, ну так как, чё молчишь то???
Код Си для большего понимания что может scanf а что нет...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
 
int main()
{
    int iVal    = 0;
    double dVal = 0;
    char buf[256];
    printf("Especialy for Bers\n");
    printf("Enter integer : ");
    scanf("%d",&iVal);
    printf("Enter double  : ");
    scanf("%lf",&dVal);
    sprintf(buf,"%d %lf",iVal,dVal);
    printf("String : %s\n",buf);
    iVal = 0;
    dVal = 0;
    sscanf(buf,"%d %lf",&iVal,&dVal);
    printf
    (
        "GetVal :\n"
        "integer : %d"
        "double  : %lf",
        iVal,dVal
    );
    getchar();
    return 0;
}
0
Миниатюры
Ищу код перевода числа в строку и назад...  
Bers
Заблокирован
10.02.2012, 11:34 #8
Вот щас проверил:

C++
1
2
double dVal=123456.123456789; char buf[256]; 
    sprintf(buf,"%lf",dVal); //123456.123457
Похоже, что "%lf" интерпретируется как самый обыкновенный float...
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 11:38 #9
Цитата Сообщение от Bers Посмотреть сообщение
Похоже, что "%lf" интерпретируется как самый обыкновенный float...
- об этом уже велась речь на форуме, найду ссылку - сброшу...

Добавлено через 1 минуту
Цитата Сообщение от Bers Посмотреть сообщение
Ээээ... какой такой мой scanf? О чем речь вообще?
- посчитал что ставишь float т.к. на старых компиляторах double val;scanf("%lf",&val); без начального инита вылетает...
0
Bers
Заблокирован
10.02.2012, 11:45 #10
Кстати, stringstream имеет такие же сложности с double.

Поэтому, что бы не иметь потерь данных, лично я глянул вот в эту сторону:

_fcvt_s
_gcvt_s

Вообще, их там целое семейство разных. Но мне вот этих двух за глаза хватило.
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 11:54 #11
Цитата Сообщение от Bers Посмотреть сообщение
имеет такие же сложности с double.
пока ищу почитай здесь
http://stackoverflow.com/questions/2...ay-with-just-f

Because C will promote floats to doubles for functions that take variable arguments. Pointers aren't promoted to anything, so you should be using %lf or %g to read in doubles.
Добавлено через 17 секунд
Хотя я сейчас и за lf найду...

Добавлено через 4 минуты
Bers, вот тут чёрным по белому написано

http://www.dgp.toronto.edu/~ajr/209/notes/printf.html

Footnote: In printf(), the rvalue type promotions are expected. Thus %c actually corresponds to a parameter of type int and %f and %g actually correspond to parameters of type double. Thus in printf() there is no difference between %f and %lf, or between %g and %lg. However, in scanf() what is passed is a pointer to the variable so no rvalue type promotions occur or are expected. Thus %f and %lf are quite different in scanf, but the same in printf.
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 12:00 #12
Вот и скрин в потдверждение - scanf парсит всё число, всё дело в выводе
0
Миниатюры
Ищу код перевода числа в строку и назад...  
Bers
Заблокирован
10.02.2012, 12:05 #13
так и я тоже в отладчике смотрел
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 12:09 #14
Цитата Сообщение от Bers Посмотреть сообщение
так и я тоже в отладчике смотрел
- ну и что тебе не нравится?
0
Bers
Заблокирован
10.02.2012, 12:16 #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну и что тебе не нравится?
Мне не нравится:

C++
1
2
double dVal=123456.123456789; char buf[256]; 
    sprintf(buf,"%lf",dVal); //123456.123457
Что в буфер он записал весьма весьма округленное число.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 12:16
Привет! Вот еще темы с ответами:

Перевод числа из 8-й системы счисления в 2-ю без перевода в 10-ю - C++
нужно написать две программы в с++ 1) Написать программу, которая переводит число из 8-й сис*те*мы счисления в 2-ю, не переводя все...

Программа перевода числа из десятичной системы в восмеричную - C++
Помогите написать программу, всю пару просидели с подругой протупили, а проверка все ошибки выдает

Подскажите с кодом перевода числа в восьмеричную сисему - C++
Нужно разработать функцию перевода числа в восьмеричную систему. Причем с сылкой на функцию. Помогите пожалуйста оформить с ссылкой на...

Программа перевода числа из 10ой системы в двоичную - C++
Сам код: #include &lt;iostream&gt; using namespace std; int main() { long int i; int value; cout &lt;&lt; &quot;Vvedite chislo: &quot;; cin &gt;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
10.02.2012, 12:16
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru