以 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 异常抛出似乎没有理由?