Я создал функцию, которая получает строку и разделитель, разделяет строку и возвращает вектор поплавков (например, функция 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 в первой строке. Любые мысли?
Почему так сложно? Почему бы не использовать вместо него 'std :: istream & operator >> (std ;; istream, double)' input operator? –
Я не знаю этого оператора .. Как бы я его использовал? – Javi
Вот хорошая ссылка, включая примеры: http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt Вы можете использовать ее в сочетании с ['std :: istringstream'] (http: // en .cppreference.com/w/cpp/io/basic_istringstream), который вы создаете из своего параметра 'line'. –