将文件中的文本转换为浮动

问题描述 投票:0回答:1

我正在为 3d 引擎制作搅拌机模型加载器, 尝试转换其中包含浮点数的特定行, 例如:(v 1.000000 -1.000000 1.000000), 我尝试使用 std::stod() 将文件(字符串)中的数字转换为浮点数,但它不起作用(给出调试错误:已调用 abort()) 这是代码:

string search(string s, char c, int st)
{
    int i = st;
    string n; // substring

    while (i < s.size()) // if i hasnt reached end of string
    {
        if (s.at(i) == c) // if s[i] is a certain character, break while loop
        {
            break;
        }
        n.at(i) = s[i]; // assign characters of s to n
        i++;
    }
    return n;

    
}
void mesh::load(fstream &file) // file not important for error
{
    string line = "v 1.000000";
    string n = ""; // substring of search()
    n.resize(34);
    int st = 2; // starting index
    n = search(line, ' ', st); // makes a substring that end at ' ' or end of string
    
    // code that dont work (gives debug error: abort() has been called   )
    float f;
    f = stod(n);
    cout << f << "\n";
    /*
    while (getline(file,line))
    {
        switch (line.at(0))
        {
        case 'v':
            cout << "\n";
        
        }
        
    }
    */
}
c++ string floating-point numbers
1个回答
0
投票

问题是你的

search()
功能。
n.at(i) = s[i];
开始在索引
n
处填充
2
,使之前的索引未定义。您不应使用相同的
i
来索引
n
s

您只想将找到的字符附加到

n
,这可以使用
+=
来完成(请参阅如何将字符附加到std::string?以分析不同方法)。

string search(string s, char c, int st)
{
    int i = st;
    string n; // substring

    while (i < s.size()) // if i hasnt reached end of string
    {
        if (s.at(i) == c) // if s[i] is a certain character, break while loop
        {
            break;
        }
        n += s[i]; // assign characters of s to n
        i++;
    }
    return n;
}
© www.soinside.com 2019 - 2024. All rights reserved.