为什么要int-int不能为int?

时间:2019-07-07 03:37:09

标签: c++

我正在编写一个将句子转换为数字的程序,我的IDE在“ int = int-int”句子中抛出了一个异常。

该程序适用于Windows x64,我已经在Visual Studio 2017中开发了此程序。我无法尝试任何操作,因为它是如此可怕。

// problematic function
static inline int toPrime(int c) {
    if (isalpha(c))
        throw "argument c is not an alphabet!";
    int a = c - 65;
    return PrimeTable(52)[a];
    // class PrimeTable(unsigned cnt): store primes in [1, cnt].
}

// call this function
static inline int sti(std::string str) {
    std::vector<int> v;
    for (int i = 0; i < str.size(); i++) v.push_back(toPrime(str[i]));
    return std::accumulate(v.begin(), v.end(), 0);
}

我希望它没有异常(因为它是“ int = int-int” XD),但是我收到了“ Microsoft C ++异常:char”(代码:0x00007FFE31E49129)。

-----在P.M.编辑9:10 ..----- 是的,我意识到这个错误是我现在造成的:/ 而且我意识到我对课程的设计不正确:( 感谢您回答我的错误问题。对不起

1 个答案:

答案 0 :(得分:1)

这行(或者我猜这些行)就在这里:

if (isalpha(c))
        throw "argument c is not an alphabet!";

如果c不是以下任何一项,将抛出错误:

  • 数字(0-9)
  • 空白(空格,换行符(“ \ n”),制表符等)
  • 符号(+-= {},。?;和其他一堆东西。希望您能理解)
  • 不可打印的字符(您甚至看不到)
  • 空终止(代码为0)

如果不是其中之一,则会引发错误。

尝试以下方法:

if (!isalpha(c))

这应该做您想要的,但是我建议您对数据进行清理(即,确保字符串中没有上述任何内容),但是,在将其传递给此函数之前,因为这样做会这些东西中的任何一个现在都会引发错误。