我正在编写一个与字符串相关的练习:输入一个字符串( char[]或C+11字符串都无关紧要,所以我选择了后者),然后在给定字符串中找到最长(字符最多)的升序子串。我的想法是扫描整个字符串,并将str[i]与str[i+1]进行比较。我使用stoi将每个字符转换为整数,如下所示
if (stoi(str[i]) < stoi(str[i+1]))但它却给了我一个错误:
error C2665: 'std::stoi': none of the 2 overloads could convert all the argument types我怎么才能修复它?提前谢谢。
发布于 2018-07-27 21:40:04
stoi用于将std::string转换为整数。std::string::operator[]给出了所提供索引处的字符,该字符不是std::string,因此不能与stoi一起使用。
因为你有一个字符,所以你可以直接比较它们,因为所有的字符类型都是整数。所以
if (stoi(str[i]) < stoi(str[i+1]))变成了
if (str[i] < str[i+1])发布于 2018-07-27 21:40:20
std::stoi将数字的字符串表示形式转换为数字本身:stoi("42")应等于42。您需要的是字符到字符的比较,它是按原样完成的,不需要任何额外的转换:
std::size_t i{};
while(i < str.size() - 1 && str[i] < str[i + 1]) ++i;https://stackoverflow.com/questions/51559191
复制相似问题