2013-05-30 3 views
1

Так что я знаю, как это сделать на C#, но не на C++. Я пытаюсь проанализировать ввод пользователя пользователя в double (чтобы сделать математику позже), но я новичок в C++, и у меня проблемы. Помогите?Преобразование строки ввода в float/double C++

C#

public static class parse 
     { 
      public static double StringToInt(string s) 
      { 
       double line = 0; 
       while (!double.TryParse(s, out line)) 
       { 
        Console.WriteLine("Invalid input."); 
        Console.WriteLine("[The value you entered was not a number!]"); 
        s = Console.ReadLine(); 
       } 
       double x = Convert.ToDouble(s); 
       return x; 
      } 
     } 

C++ ? ? ? ?

+2

[atof] (http://www.cplusplus.com/reference/cstdlib/atof/) – yngccc

+0

http://stackoverflow.com/questions/1012571/stdstring-to-float -или-double – R3D3vil

+0

Не совсем тот же вопрос, но метод тот же: http://stackoverflow.com/questions/16181630/how-to-check-stdstring-if-its-indeed-an-integer/16181759#16181759 –

ответ

2

Взгляните на atof. Обратите внимание, что atof принимает cstrings, а не класс string.

#include <iostream> 
#include <stdlib.h> // atof 

using namespace std; 

int main() { 
    string input; 
    cout << "enter number: "; 
    cin >> input; 
    double result; 
    result = atof(input.c_str()); 
    cout << "You entered " << result << endl; 
    return 0; 
} 

http://www.cplusplus.com/reference/cstdlib/atof/

0

Использование atof:

#include<cstdlib> 
#include<iostream> 

using namespace std; 

int main() { 
    string foo("123.2"); 
    double num = 0; 

    num = atof(foo.c_str()); 
    cout << num; 

    return 0; 
} 

Выход:

123.2 
1
std::stringstream s(std::string("3.1415927")); 
double d; 
s >> d; 
1

Это упрощенная версия моего ответа here, который был для преобразования в int с помощью std::istringstream:

std::istringstream i("123.45"); 
double x ; 
i >> x ; 

Вы также можете использовать strtod:

std::cout << std::strtod("123.45", NULL) << std::endl ; 
0
string str; 
... 
float fl; 
stringstream strs; 
strs<<str; 
strs>>fl; 

это преобразует строку плавать. вы можете использовать любой тип данных вместо float, чтобы строка была преобразована в этот тип данных. вы даже можете написать общую функцию, которая преобразует строку в конкретный тип данных.

Смежные вопросы