将字符串转换为long long int

时间:2014-02-19 17:01:45

标签: c++

我想以string的形式从文本文件中读取第3行,将其转换为long long int,然后返回该值。

文本文件第3行的数据为1234567890123456

long long int File::Getline3(int user1, int user3)
{
    std::string filename = std::to_string(user1);

    std::ifstream fin(filename + ".txt");
    fin.getline (line1, 5);
    fin.getline (line2, 5);
    fin.getline (line3, 20);
    fin.close();

    // convert line 3 to a string called str
    const char *line3;
    std::string str(line3);

    // convert str to long long int called user3
    long long int strtoll(const char *nptr, char **endptr, int base);
    char* endptr = NULL;
    user3 = strtoll(str.c_str(), &endptr, 10);

    return user3;
}

评论是为了表明我认为我在做什么,但我可能错了(我是指针新手)。

当我尝试构建程序时出现“未解决的外部”错误。

3 个答案:

答案 0 :(得分:4)

long long int strtoll(const char *nptr, char **endptr, int base);

此行声明一个函数。这意味着当你向strtoll调用几行时,你将调用该函数,因为它是最明显的候选者。但是,你从未定义它。

相反,您打算调用std::strtoll 定义(由标准库定义),如果您不这样做,将通过假定的using namespace std指令找到它通过使用相同的名称错误地声明您自己的这个不存在的函数来隐藏它。 :)

只需删除多余的声明:

// convert str to long long int called user3
char* endptr = NULL;
user3 = strtoll(str.c_str(), &endptr, 10);

你的const char* line3有一个类似的问题,你在函数内部声明,永远不会分配任何内容,然后构造一个字符串。那是不确定的;指针未初始化。假设您有一些line3数据成员(以及您的line1line2),您再次使用同名的本地变量隐藏

最后,如果您只是写入并返回它,那么通过值传递user3是完全没有意义的。删除该参数。

把所有这些放在一起,你的代码可能应该是这样的:

// convert line3 to long long int
char* endptr = NULL;
return strtoll(line3, &endptr, 10);

简而言之,请尽快申报!

答案 1 :(得分:0)

答案 2 :(得分:0)

long long int File::Getline3(int user1)
{
    std::string filename = std::to_string(user1);

    std::ifstream fin(filename + ".txt");

    std::string line1, line2; // place to actually store the lines

    getline(fin, line1); // read a line
    getline(fin, line2); // read another line

    long long int number_on_line_3; // somewhere to store the number
    fin >> number_on_line3;         // store the number
    fin.close();

    return number_on_line_3;        // return the number
}