我正在编码与字符串有关的练习:输入一个字符串(无论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
我该如何解决?预先感谢。
答案 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])