以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换 (lldb)

Posted

技术标签:

【中文标题】以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换 (lldb)【英文标题】:terminating with uncaught exception of type std::invalid_argument: stoi: no conversion (lldb) 【发布时间】:2017-08-24 14:23:13 【问题描述】:

我想将一个字符转换为整数并计算它的频率,但我收到了这个错误!我正在使用 XCODE。

以 std::invalid_argument: stoi: no conversion 类型的未捕获异常终止。

#include <iostream>

int main(int argc, const char * argv[]) 
std::string s;
std::cin>>s;

int a[27];
for(int i=0;i<s.length();i++)

    int c;
    c=std::stoi(&s[i]);
    a[c]++;

for(int i=0;i<27;i++)
    std::cout<<a[i];

return 0;

【问题讨论】:

我很确定你不需要stoi - 这里没有意义。预期的输入是什么? 为什么要将字符串地址传递给stoi? It takes a const reference to a string @IgorTandetnik 输入将是一个字符串。 当然是字符串。一个包含什么字符的字符串呢?您的程序接受输入并产生输出 - 显示预期输入的示例,以及在给定输入的情况下程序预期产生的输出示例。 @IgorTandetnik 如果我输入“aaaaaabb”,则数组在 a[1] 处应具有值 6,在 a[2] 处具有值 2,将 1-26 视为按 a、b、c 顺序排列的字母。 ...z 【参考方案1】:

首先检查它是否是字母字符,然后将字符转换为小写,然后再转换为“a”,这样你就得到了 0-25 的值。

if (isalpha(s[i]))

    c= tolower(s[i]) - 'a';
    a[c]++;

你还必须初始化数组a,因为它是立即

int a[26] =  0 ;

如果你想打印结果

for(unsigned int i=0;i<(sizeof(a) / sizeof(a[0]));i++)

    std::cout << a[i];

Here is the example.

【讨论】:

以上是关于以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换 (lldb)的主要内容,如果未能解决你的问题,请参考以下文章

我不断收到 'std::invalid_argument' what(): stoi 异常抛出似乎没有理由?

在 try catch 中包装所有 swig 生成的方法

GDB抱怨缺少raise.c

实现基类方法以访问派生类的属性

为啥有些实体 NSManagedObjects 和一些以其类命名?

从类继承以保证向后兼容性