【问题标题】:terminating with uncaught exception of type std::invalid_argument: stoi: no conversion (lldb)以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换 (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 - 这里没有意义。预期的输入是什么?
  • 为什么要将字符串地址传递给stoiIt takes a const reference to a string
  • @IgorTandetnik 输入将是一个字符串。
  • 当然是字符串。一个包含什么字符的字符串呢?您的程序接受输入并产生输出 - 显示预期输入的示例,以及在给定输入的情况下程序预期产生的输出示例。
  • @IgorTandetnik 如果我输入“aaaaaabb”,则数组在 a[1] 处应具有值 6,在 a[2] 处具有值 2,将 1-26 视为按 a、b、c 顺序排列的字母。 ...z

标签: c++ string


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 2015-01-06
    • 2018-12-11
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多