引发'std :: invalid_argument'what()实例后终止调用:leetcode问题中的stoi错误

时间:2019-07-19 10:31:00

标签: c++

我正在尝试使用leetcode中的一个关于复数乘法的问题。

但是,我在使用stoi()时遇到问题。该代码适用于正复数,但在给定输入时显示错误,例如:

输入:“-1 + -1i”,“ 1 + -1i”

class Solution {
    public:
        string complexNumberMultiply(string a, string b) {
            int aplus = a.find('+');
            int bplus = b.find('+');
            int ai = a.find('i');
            int bi = b.find('i');

            int a1 = stoi(a.substr(0, aplus));
            int b1 = stoi(a.substr(aplus + 1, ai), nullptr);
            int a2 = stoi(a.substr(0, bplus), nullptr);
            int b2 = stoi(a.substr(bplus + 1, bi), nullptr);
            int aa = a1 * a2 - (b1 * b2);
            int ab = a1 * b2 + a2 * b1;
            string res = to_string(aa) + "+" + to_string(ab) + "i";
            return res;
        }
};

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

问题是您犯了一个错误。

对于a2b2,您使用a.substr()而不是b.substr()

我用您的示例进行了测试,结果返回-2 + 0i。