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

Конвертирование из float в str и наоборот - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
pro_xaoc
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 53
13.10.2010, 12:23     Конвертирование из float в str и наоборот #1
Приветствую всех! Господа, помогите освоить конвертацию типов. Знаю, что такие темы не раз поднимались, но прочитав их чего-то недопонял (ибо я новичок). Многие советуют использовать atoi, scanf и т.д., но не знаю как их применять. Вот например:
C++
1
2
3
4
5
float a;
string str="exit";
cin >> a;
if (a==str) exit(1);
else ... ля-ля-ля-тополя
Теперь тут ошибка выходит, что нет конвертации. Вот теперь, как можно конвертировать из string в float, из float в string? Раньше я программировал на дельфи, там всё просто было, IntToStr или StrToFloat и т.д. Нет ли такого в С++? Буду очень благодарен за любую помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2010, 12:23     Конвертирование из float в str и наоборот
Посмотрите здесь:

C++ Str в long double и наоборот
C++ Написать и протестировать функцию, которая по заданной строке Str формирует новую строку, состоящую только из цифр, входящих в Str
C++ Конвертирование float/int to string
опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing C++
C++ как создать функцию или программу, чтобы str состояла из цифр,а также давалась новой строке str
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
papochka
 Аватар для papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
13.10.2010, 12:38     Конвертирование из float в str и наоборот #2
C++
1
2
3
char,string... YorString = "...";
float Temp;
Temp = static_cast<float>(YorString);

Для вашего случая:
C++
1
2
3
4
5
6
float a;
string str="exit";
a = static_cast<float>(str);
cin >> a;
if (a==str) exit(1);
else ... ля-ля-ля-тополя
Наоборот, думаю, сделаете?
Fenrir1
2 / 2 / 1
Регистрация: 13.10.2010
Сообщений: 6
13.10.2010, 12:40     Конвертирование из float в str и наоборот #3
попробуйте так:
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 <string>
#include <iostream>
#include <sstream>
 
using namespace std;
 
template<class T> T fromString(const string& s)
{
    istringstream iss(s);
    T res;
    iss >> res;
    return res;
}
 
int main()
{
    string s = "123.123";
    int i = fromString<int>(s);
    double d = fromString<double>(s);
    float f = fromString<float>(s);  
    cout << i << endl;
    cout << d << endl;
    cout << f << endl;  
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 13:20     Конвертирование из float в str и наоборот #4
pro_xaoc, а с какой целью Вы для ввода слова тип float используете? float и double используются для хранения вещественных чисел разной степени точности. Если задача - читать строку ввода, проверять, не содержит ли она команду exit, и если не содержит, интерпретировать ввод, как вещественное число, то вот например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <sstream>
 
int main(){
    std::string buf;
    double val;
 
    while ( std::cout << "> " && std::cin >> buf && buf != "exit" ){
        std::istringstream ist(buf);
        ist.exceptions(std::istringstream::failbit);
        try {
            ist >> val;
        }
        catch ( std::istringstream::failure e ){
            std::cerr << "Wrong input!" << std::endl;
            continue;
        }
        std::cout << "Value is " << val << std::endl;
    }
 
    return 0;
}
papochka
 Аватар для papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
13.10.2010, 13:42     Конвертирование из float в str и наоборот #5
Цитата Сообщение от easybudda Посмотреть сообщение
pro_xaoc, а с какой целью Вы для ввода слова тип float используете? float и double используются для хранения вещественных чисел разной степени точности. Если задача - читать строку ввода, проверять, не содержит ли она команду exit, и если не содержит, интерпретировать ввод, как вещественное число, то вот например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <sstream>
 
int main(){
    std::string buf;
    double val;
 
    while ( std::cout << "> " && std::cin >> buf && buf != "exit" ){
        std::istringstream ist(buf);
        ist.exceptions(std::istringstream::failbit);
        try {
            ist >> val;
        }
        catch ( std::istringstream::failure e ){
            std::cerr << "Wrong input!" << std::endl;
            continue;
        }
        std::cout << "Value is " << val << std::endl;
    }
 
    return 0;
}
easybudda, А через static_cast не получится перевести, как я выше написал?

Что-то прошелся по инету, не приветствуют этот способ...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 14:00     Конвертирование из float в str и наоборот #6
Цитата Сообщение от papochka Посмотреть сообщение
А через static_cast не получится перевести, как я выше написал?
Не, так не получится
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main(){
    std::string str("12.34");
    double val = static_cast<double>(str);
    std::cout << val << std::endl;
 
    return 0;
}
Код
$ g++ -o double_cast double_cast.cpp 
double_cast.cpp: In function 'int main()':
double_cast.cpp:6: error: invalid static_cast from type 'std::string' to type 'double'
Цитата Сообщение от papochka Посмотреть сообщение
не приветствуют этот способ...
Какой из них? Как я написал? Чем аргументируют?
pro_xaoc
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 53
13.10.2010, 14:00  [ТС]     Конвертирование из float в str и наоборот #7
Цитата Сообщение от Fenrir1 Посмотреть сообщение
попробуйте так:
C++
1
pro_xaoc, а с какой целью Вы для ввода слова тип float используете? float и double используются для хранения вещественных чисел разной степени точности. Если задача - читать строку ввода, проверять, не содержит ли она команду exit, и если не содержит, интерпретировать ввод, как вещественное число
дело в том, что я создаю на С++ калькулятор (все наверное создавали, когда начинали изучать). Так вот, тип флоат я использую для того, чтобы принимать цифры с клавы и походу проверить, если там вместо цифр идет exit, то условие выполняется и прога завершается. Ну вот собственно сам код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <cstring>
using namespace std;
 
int main()
{
    float a,b,c;
    int y;
    char znak;
    string z="exit";
    setlocale(LC_ALL,"Russian");
    cout << "\t\t\t     Добро пожаловать! \n";
    cout << "\t\t\t Калькулятор 1.0 by pro_xaoc \n \n";
    Sleep(1000);
    cout << "Загрузка ";
    for (y=0; y<5; y++) 
    { 
        cout << ".";
        Sleep(1000);
    }
    cout << "\rДля завершения программы наберите exit.\n";
    cout << "Применимые операции: + - * / \n";
    cout << "Введите два числа: ";
    cin >> a >> b;
    if (a==z)
    {
        exit(1);
    }
    else
    {
    cout << "Теперь введите знак нужной вам операции \n";
    cin >> znak;
    switch (znak)
    {
        case '+':
            c=a+b;
            break;
        case '-':
            c=a-b;
            break;
        case '/':
            c=a/b;
            break;
        case '*':
            c=a*b;
            break;
    }
    cout << "Ответ: " << a << znak << b << " = " << c; 
    Sleep(5000);
    }
    return 0;
}
Вот так вот.
А через static_cast не получится перевести, как я выше написал?
Что-то прошелся по инету, не приветствуют этот способ...
чето ошибка выходит:
Код
static_cast: невозможно преобразовать 'std::string' в 'float'
        Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
papochka
 Аватар для papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
13.10.2010, 14:07     Конвертирование из float в str и наоборот #8
Цитата Сообщение от easybudda Посмотреть сообщение
Не, так не получится
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main(){
    std::string str("12.34");
    double val = static_cast<double>(str);
    std::cout << val << std::endl;
 
    return 0;
}
Код
$ g++ -o double_cast double_cast.cpp 
double_cast.cpp: In function 'int main()':
double_cast.cpp:6: error: invalid static_cast from type 'std::string' to type 'double'

Какой из них? Как я написал? Чем аргументируют?
нет. тот, что я привел...

Добавлено через 5 минут
извините.. по неопытности..
pro_xaoc
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 53
13.10.2010, 14:52  [ТС]     Конвертирование из float в str и наоборот #9
Друзья, ну что с моим вопросом?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 15:27     Конвертирование из float в str и наоборот #10
pro_xaoc, так вроде ответил - если читаете из ввода число, не пытайтесь его со строкой сравнивать...
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <sstream>
 
int main(){
    std::string buf;
    double firstOperand, secondOperand, result;
    char action;
 
    while ( std::cout << "> " && std::getline(std::cin, buf) && buf != "exit" ){
        std::istringstream ist(buf);
        ist.exceptions(std::istringstream::failbit);
        try {
            ist >> firstOperand >> action >> secondOperand;
        }
        catch ( std::istringstream::failure e){
            std::cerr << "Wrong input!" << std::endl;
            continue;
        }
        switch ( action ){
        case '+' :
            result = firstOperand + secondOperand;
            break;
        case '-' :
            result = firstOperand - secondOperand;
            break;
        case '*' :
            result = firstOperand * secondOperand;
            break;
        case '/' :
            if ( secondOperand == 0.0 ){
                std::cerr << "Dividion by 0 not allowed!" << std::endl;
                result = 0;
            }
            else
                result = firstOperand / secondOperand;
            break;
        }
        std::cout << "Result: " << result << std::endl;
    }
 
    return 0;
}
Код
~/cpp/numbers $ g++ -o simple_calc simple_calc.cpp 
~/cpp/numbers $ ./simple_calc 
> 45 + 5
Result: 50
> 13+1
Result: 14
> 18 / 5
Result: 3.6
> 8 / 0
Dividion by 0 not allowed!
Result: 0
> exit
~/cpp/numbers $
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
13.10.2010, 15:33     Конвертирование из float в str и наоборот #11
Ммм, я наверное более точно сформулирую вопрос:
Как из переменной типа float сделать переменную char и наоборот\
pro_xaoc
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 53
13.10.2010, 15:39  [ТС]     Конвертирование из float в str и наоборот #12
Цитата Сообщение от LineStown Посмотреть сообщение
Ммм, я наверное более точно сформулирую вопрос:
Как из переменной типа float сделать переменную char и наоборот\
ну хотя бы и так.
papochka
 Аватар для papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
13.10.2010, 15:46     Конвертирование из float в str и наоборот #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
here is an example of std::stringstream:
 
#include <string>
#include <sstream>
#include <iostream>
 
std::string float_to_str(float f)
{
std::stringstream stream;
stream << f;
return stream.str();
}
 
int main()
{
std::cout << float_to_str(123.67898f) << std::endl;
return 0;
}
вот что-то нагуглил..

http://liveworkspace.org/code/2c1771...574db991fffc3b вроде работает..

хм.. можно лаконичней.. sprintf'ом?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 15:54     Конвертирование из float в str и наоборот #14
pro_xaoc, Вам Fenrir1 функцию написал, возвращающую из строки данные разных типов, я Вам калькулятор написал, Вы ответы читаете?

Цитата Сообщение от LineStown Посмотреть сообщение
Как из переменной типа float сделать переменную char и наоборот
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
 
#define STR_LEN 32
 
int main(void){
    double val = 3.14;
    char buf[STR_LEN] = { 0 };
 
    snprintf(buf, STR_LEN, "%f", val);
    printf("As string: %s\n", buf);
    printf("As number: %f\n", atof(buf));
 
    return 0;
}
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
13.10.2010, 16:16     Конвертирование из float в str и наоборот #15
easybudda, Спасибо пример хороший, а как быть когда длина char не известна, а используется указатель?
pro_xaoc
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 53
13.10.2010, 16:33  [ТС]     Конвертирование из float в str и наоборот #16
easybudda, спасибо большое и извини, я не заметил ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2010, 17:23     Конвертирование из float в str и наоборот
Еще ссылки по теме:

C++ Функции str.size() и str.length() - в чем их разница?
Как заставить Strncpy вложить в itog часть символов строки str, если дина str больше, чем кол-во нужных нам символов? C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 17:23     Конвертирование из float в str и наоборот #17
Цитата Сообщение от LineStown Посмотреть сообщение
а как быть когда длина char не известна, а используется указатель?
Есть gnu-шная функция asprintf(), но не факт, что в мелкомягких компиляторах будет работать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
    double val = 3.14;
    char * buf;
 
    if ( asprintf(&buf, "%f", val) == -1 ){
        perror("asprintf");
        return 1;
    }
    printf("As string: %s\n", buf);
    printf("As number: %f\n", atof(buf));
    free(buf);
 
    return 0;
}
Yandex
Объявления
13.10.2010, 17:23     Конвертирование из float в str и наоборот
Ответ Создать тему
Опции темы

Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru