Ну, вы должны сказать atof(stropenprice[x].c_str())
, потому что atof()
работает только со строками в стиле C, а не std::string
объектами, но этого недостаточно.Вы все еще должны разбить строку на части, разделенные запятыми.find()
и substr()
могут быть хорошим началом (например, см. Здесь ), хотя, возможно, более общая функция токенизации была бы более элегантной.
Вот функция токенизатора, которую я украл изгде-то так давно я не помню, поэтому извиняюсь за плагиат:
std::vector<std::string> tokenize(const std::string & str, const std::string & delimiters)
{
std::vector<std::string> tokens;
// Skip delimiters at beginning.
std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// Find first "non-delimiter".
std::string::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::string::npos != pos || std::string::npos != lastPos)
{
// Found a token, add it to the vector.
tokens.push_back(str.substr(lastPos, pos - lastPos));
// Skip delimiters. Note the "not_of"
lastPos = str.find_first_not_of(delimiters, pos);
// Find next "non-delimiter"
pos = str.find_first_of(delimiters, lastPos);
}
return tokens;
}
Использование: std::vector<std::string> v = tokenize(line, ",");
Теперь используйте std::atof()
(или std::strtod()
) на каждой строке в векторе.
Вот предложение, просто чтобы дать вам некоторое представление о том, как обычно пишется такой код на C ++:
#include <string>
#include <fstream>
#include <vector>
#include <cstdlib>
// ...
std::vector<double> v;
std::ifstream infile("thefile.txt");
std::string line;
while (std::getline(infile, line))
{
v.push_back(std::strtod(line.c_str(), NULL)); // or std::atof(line.c_str())
}
// we ended up reading v.size() lines