2015-04-24 3 views
-1

Я создал функцию, которая получает строку и разделитель, разделяет строку и возвращает вектор поплавков (например, функция split в java). Это функция:Преобразование строки в double в C++

vector<float> extractNumbers(string line, char delimiter) { 
    vector<float> a; 
    float f; 
    string forNow = ""; 
    for (unsigned int i = 0; i < line.size(); i++) { 
     if (line.at(i) == delimeter) { 
      f = ::atof(forNow.c_str()); 
      cout << ::atof(forNow.c_str()) << endl; 
      a.push_back(f); 
      forNow = ""; 
     } else { 
      forNow += line.at(i); 
     } 
    } 
    f = ::atof(forNow.c_str()); 
    cout << f << endl; 
    a.push_back(f); 
    return a; 
} 

Это текстовый файл, я пытаюсь его:

3 3 
1 1 1 
1 2 1 
1 1 1 

Я называю эту функцию: vector<float> floatLine = extractNumbers(line, ' '); Когда я пытаюсь напечатать forNow параметр Я получаю номера как и в тексте, но когда я печатаю f или ::atof(forNow.c_str()), я получаю 0 вместо первых 3 в первой строке. Любые мысли?

+0

Почему так сложно? Почему бы не использовать вместо него 'std :: istream & operator >> (std ;; istream, double)' input operator? –

+0

Я не знаю этого оператора .. Как бы я его использовал? – Javi

+0

Вот хорошая ссылка, включая примеры: http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt Вы можете использовать ее в сочетании с ['std :: istringstream'] (http: // en .cppreference.com/w/cpp/io/basic_istringstream), который вы создаете из своего параметра 'line'. –

ответ

2

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

float a, b; 
float c, d, e; 
float f, g, h; 
fstream file("data.dat", ios::in); 
if (file) { 
    file >> a >> b; 
    file >> c >> d >> e; 
    file >> f >> g >> h; 
    file.close(); 
} 
Смежные вопросы