C ++ stoi:2个重载都不能转换所有参数类型

时间:2018-07-27 13:36:57

标签: c++ string c++11

我正在编码与字符串有关的练习:输入一个字符串(无论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

我该如何解决?预先感谢。

2 个答案:

答案 0 :(得分:2)

std::stoi将数字的字符串表示形式转换为数字本身:stoi("42")应该等于42。您需要的是一个按字符进行比较的比较,该比较按原样进行,无需任何操作额外转化:

std::size_t i{};
while(i < str.size() - 1 && str[i] < str[i + 1]) ++i;

答案 1 :(得分:1)

stoi用于将std::string转换为整数。 std::string::operator[]为您提供所提供索引处的字符,该字符不是std::string,因此不能与stoi一起使用。

由于有字符,您可以直接比较那些字符,因为所有字符类型都是整数。所以

if (stoi(str[i]) < stoi(str[i+1]))

成为

if (str[i] < str[i+1])