在 C++ 中将字符串转换为双精度
Posted
技术标签:
【中文标题】在 C++ 中将字符串转换为双精度【英文标题】:Converting string to double in c++ 【发布时间】:2015-04-24 15:08:17 【问题描述】:我创建了一个函数,它接收一行和一个分隔符,分隔行并返回一个浮点向量(如 java 中的 split
函数)。
这是函数:
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)
输入运算符?
我不知道这个操作符.. 怎么用?
这是一个很好的参考,包括示例:en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt 您可以将它与您从line
参数创建的std::istringstream
结合使用。
@JaviDorfsman 也许如果你用这个文件写你想做什么会更好。
在ideone.com/X0rwvB 工作正常。
【参考方案1】:
如果您不知道这种与文件交互的便捷方式。你可以像这样使用它们:
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();
【讨论】:
以上是关于在 C++ 中将字符串转换为双精度的主要内容,如果未能解决你的问题,请参考以下文章