首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ stoi: 2个重载都无法转换所有参数类型

C++ stoi: 2个重载都无法转换所有参数类型
EN

Stack Overflow用户
提问于 2018-07-27 21:36:57
回答 2查看 1.4K关注 0票数 0

我正在编写一个与字符串相关的练习:输入一个字符串( char[]或C+11字符串都无关紧要,所以我选择了后者),然后在给定字符串中找到最长(字符最多)的升序子串。我的想法是扫描整个字符串,并将str[i]str[i+1]进行比较。我使用stoi将每个字符转换为整数,如下所示

代码语言:javascript
运行
复制
if (stoi(str[i]) < stoi(str[i+1]))

但它却给了我一个错误:

代码语言:javascript
运行
复制
error C2665: 'std::stoi': none of the 2 overloads could convert all the argument types

我怎么才能修复它?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 21:40:04

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

因为你有一个字符,所以你可以直接比较它们,因为所有的字符类型都是整数。所以

代码语言:javascript
运行
复制
if (stoi(str[i]) < stoi(str[i+1]))

变成了

代码语言:javascript
运行
复制
if (str[i] < str[i+1])
票数 1
EN

Stack Overflow用户

发布于 2018-07-27 21:40:20

std::stoi将数字的字符串表示形式转换为数字本身:stoi("42")应等于42。您需要的是字符到字符的比较,它是按原样完成的,不需要任何额外的转换:

代码语言:javascript
运行
复制
std::size_t i{};
while(i < str.size() - 1 && str[i] < str[i + 1]) ++i;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51559191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档