分词器将字符串转换为浮点数

发布于 2024-12-12 20:57:29 字数 378 浏览 1 评论 0原文

我想在 C++ 中将字符串转换为浮点数。目前正在尝试使用atof。非常感谢任何建议。

他们的身份是: 2.22,2.33,2.44,2.55

最后,我希望临时数组看起来像: 温度[4] = {2.22,2.33,2.44,2.55}

getline (myfile,line);
t_tokenizer tok(line, sep);
float temp[4];
int counter = 0;

for (t_tokenizer::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
    temp[counter] = std::atof(* beg);
    counter++;
}

I'd like to convert a string to a float in C++. currently trying to use atof. Any suggestions are much appreciated.

they are coming in as:
2.22,2.33,2.44,2.55

at the end, I'd like the temp array to look like:
Temp[4] = {2.22,2.33,2.44,2.55}

getline (myfile,line);
t_tokenizer tok(line, sep);
float temp[4];
int counter = 0;

for (t_tokenizer::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
    temp[counter] = std::atof(* beg);
    counter++;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半寸时光 2024-12-19 20:57:29

我会简单地使用stringstream

#include <sstream>

template <class T> 
bool fromString(T &t, const std::string &s, 
                std::ios_base& (*f)(std::ios_base&) = std::dec)) {
  std::istringstream iss(s);
  return !(iss >> f >> t).fail();
}

I would simply use a stringstream:

#include <sstream>

template <class T> 
bool fromString(T &t, const std::string &s, 
                std::ios_base& (*f)(std::ios_base&) = std::dec)) {
  std::istringstream iss(s);
  return !(iss >> f >> t).fail();
}
无风消散 2024-12-19 20:57:29

您始终可以使用 boost 的 lexical_cast ,或非 boost 的等效项:

string strarr[] = {"1.1", "2.2", "3.3", "4.4"};
vector<string> strvec(strarr, end(strarr));

vector<float> floatvec;

for (auto i = strvec.begin(); i != strvec.end(); ++i) {
    stringstream s(*i);
    float tmp;
    s >> tmp;
    floatvec.push_back(tmp);
}

for (auto i = floatvec.begin(); i != floatvec.end(); ++i)
    cout << *i << endl;

You can always use boost's lexical_cast, or the non-boost equivalent:

string strarr[] = {"1.1", "2.2", "3.3", "4.4"};
vector<string> strvec(strarr, end(strarr));

vector<float> floatvec;

for (auto i = strvec.begin(); i != strvec.end(); ++i) {
    stringstream s(*i);
    float tmp;
    s >> tmp;
    floatvec.push_back(tmp);
}

for (auto i = floatvec.begin(); i != floatvec.end(); ++i)
    cout << *i << endl;

你的方法很好,但要注意边界条件:

getline (myfile,line);
t_tokenizer tok(line, sep);
float temp[4];
int counter = 0;

for (t_tokenizer::iterator beg = tok.begin(); beg != tok.end() && counter < 4; ++beg)
{
    temp[counter] = std::atof(* beg);
    ++counter;
}

Your approach is fine, but beware to boundary conditions:

getline (myfile,line);
t_tokenizer tok(line, sep);
float temp[4];
int counter = 0;

for (t_tokenizer::iterator beg = tok.begin(); beg != tok.end() && counter < 4; ++beg)
{
    temp[counter] = std::atof(* beg);
    ++counter;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文