C ++ stoi:2个重载都不能转换所有参数类型
Posted
技术标签:
【中文标题】C ++ stoi:2个重载都不能转换所有参数类型【英文标题】:C++ stoi: none of the 2 overloads could convert all the argument types 【发布时间】:2018-07-27 13:36:56 【问题描述】:我正在编写一个与字符串有关的练习:输入一个字符串(不管是 char[] 还是 C+11 字符串,所以我选择了后者),然后在给定字符串中找到最长(具有最多字符)的升序子字符串.我的想法是扫描整个字符串并将str[i]
与str[i+1]
进行比较。我用stoi
把每个字符转成int,看起来是这样的
if (stoi(str[i]) < stoi(str[i+1]))
但它反而给了我错误:
error C2665: 'std::stoi': none of the 2 overloads could convert all the argument types
我该如何解决?提前致谢。
【问题讨论】:
如果您阅读了整个错误消息,它应该会告诉您std::stoi
需要 字符串,而不是单个字符。
"我用 stoi 将每个字符转换为 int" 只是不要,直接使用char
s
char
是整数类型 - 你不需要转换任何东西
【参考方案1】:
std::stoi
将数字的字符串表示形式转换为数字本身:stoi("42")
应该等于 42。您需要的是按原样完成的字符到字符比较,无需任何额外的转换:
std::size_t i;
while(i < str.size() - 1 && str[i] < str[i + 1]) ++i;
【讨论】:
【参考方案2】:stoi
用于将std::string
转换为整数。 std::string::operator[]
为您提供所提供索引处的字符,该字符不是std::string
,因此不能与stoi
一起使用。
因为你有一个字符,你可以直接比较它们,因为所有字符类型都是整数。所以
if (stoi(str[i]) < stoi(str[i+1]))
变成
if (str[i] < str[i+1])
【讨论】:
以上是关于C ++ stoi:2个重载都不能转换所有参数类型的主要内容,如果未能解决你的问题,请参考以下文章
c++sort函数“std::_Debug_range2”: 2 个重载中没有一个可以转换所有参数类型 错误