C++字符串到 int 而不使用 atoi() 或 stoi()

C++ string to int without using atoi() or stoi()

本文关键字:atoi stoi 字符串 int C++      更新时间:2023-10-16

嗨,我是C++新手,并尝试做一项作业,我们从 txt 文件中读取大量数据

,格式为
 surname,initial,number1,number2

在有人建议将 2 个值读取为字符串然后使用 stoi(( 或 atoi(( 转换为 int 之前,我寻求帮助。这很好用,除了我需要使用此参数"-std=c++11"进行编译,否则它将返回错误。这在我自己的计算机上不是问题,它将处理"-std=c++11",但不幸的是,对我来说,我必须在其上展示程序的机器没有此选项。

如果有另一种方法可以将字符串转换为不使用 stoi 或 atoi 的 int?

这是我到目前为止的代码。

while (getline(inputFile, line))
{
    stringstream linestream(line);
    getline(linestream, Surname, ',');
    getline(linestream, Initial, ',');
    getline(linestream, strnum1, ',');
    getline(linestream, strnum2, ',');
    number1 = stoi(strnum1);
    number2 = stoi(strnum2);
    dosomethingwith(Surname, Initial, number1, number2);
}

我认为你可以编写自己的stoi函数。这是我的代码,我已经测试过了,非常简单。

long stoi(const char *s)
{
    long i;
    i = 0;
    while(*s >= '0' && *s <= '9')
    {
        i = i * 10 + (*s - '0');
        s++;
    }
    return i;
}

你已经在使用stringstream,它给了你这样的"功能"。

void func()
{
    std::string strnum1("1");
    std::string strnum2("2");
    int number1;
    int number2;
    std::stringstream convert;
    convert << strnum1;
    convert >> number1;
    convert.str(""); // clear the stringstream
    convert.clear(); // clear the state flags for another conversion
    convert << strnum2;
    convert >> number2;
}