【问题标题】:Invalid conversion from char to const* char, What is wrong with the code?从 char 到 const* char 的转换无效,代码有什么问题?
【发布时间】:2019-06-20 10:12:56
【问题描述】:

我正在尝试编写一个函数,它采用一个 int 参数并返回其数字的总和。例如,digital_root(123) 将返回 1+2+3,即 6。而在 for 循环中我不能将单个字符转换为整数..

应该包括我同时使用了 atoi() 和 stoi() 函数。代码有什么问题?

int digital_root(int x)
{
    int t = 0;
    string str = to_string(x);
    for(char& c : str){
        t += atoi(c);
    }
    return t;
}

我希望字符能够成功转换为整数。我该怎么做?

【问题讨论】:

  • 您不需要引入或使用任何字符串来将数字相加。想想除以 10 和模数。
  • 有什么问题?你收到错误了吗?例外?你的问题不是很明确。
  • 如果你坚持使用字符串方式进行计算,str.substr(i, 1)可能会被 atoi()/stoi() 接受。
  • 我可以使用其他方便的功能吗?为什么使用字符串是个坏主意?

标签: c++ arrays string char


【解决方案1】:

看看std::atoi,它的参数类型是const char*,但是你传递了一个char。从charconst char* 的转换是不可能的,这是编译器抱怨的。

您想要的是通过做一些 ASCII 数学将 char 转换为 int:

t += static_cast<int>(c)  - '0';

但请注意,虽然这可行,但此任务有更好的解决方案。它不需要转换为字符串,而是完全依赖整数除法,重复使用% 10

【讨论】:

  • 有没有办法通过for循环获取char类型?
  • 我不明白这个问题,循环变量已经是char&amp;?!
  • 正如你所说,我需要 const* char 类型才能使用 atoi 和 stoi 函数。那么我应该如何更改我的 for 循环,以便我可以使用 const* char 而不是 char? (我的意思是 c 变量作为 const* char)
  • 您可以将每个char 转换为以空字符结尾的字符串,然后将std::string::c_str() 传递给atoi。但请注意,虽然这可能有效,但这样做绝对没有意义。并且不可能遍历const char*,因为std::stringchar 的序列,而不是const char* 的序列。
猜你喜欢
  • 2015-01-05
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多