c++ - Stoi 以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换
问题描述
/* strtok example */
#include <iostream>
#include <string>
#include<list>
using namespace std;
int main ()
{
list<string> read;
char str[] ="g 6 7 v 7 e 0 4 e 11 43 e 25 57 e 3 5 e 4 6 e 5 6";
char * pch;
pch = strtok (str," ");
while (pch != NULL)
{
read.push_back(pch);
pch = strtok (NULL, " ");
}
list<string>::iterator i;
i = read.begin();
i++;
int grid_x = stoi(*++i,nullptr,10);
int grid_y = stoi(*++i,nullptr,10);
i++;
int vertices = stoi(*i,nullptr,10);
return 0;
}
我正在尝试将字符数组读入字符串列表,然后尝试将字符串转换为整数,以便我可以利用这些值进行进一步处理。但是,我一直遇到编译器告诉我的错误
以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换
我是 C++ 新手,所以我无法调试。
有没有更简单的方法从字符数组中提取数字?
解决方案
你的代码
i++; // points 6
int grid_x = stoi(*++i,nullptr,10); // skip to 7, read it
int grid_y = stoi(*++i,nullptr,10); // skip to v and there is no conversion from `v` to int
上面代码中的最后一行崩溃了,没有从v
字符串到 int 值的转换,抛出了异常。
打电话时,您应该在阅读后atoi
提前i
i = read.begin();
i++; // advance and i points to 6
int grid_x = stoi(*i++,nullptr,10); // read 6 and advance
int grid_y = stoi(*i++,nullptr,10); // read 7 and advance
int vertices = stoi(*++i,nullptr,10); // advance v and read 7
*i++
和之间有区别*++i
。在前一种情况下:读取 和 Advance 所指向的值i
,i
在后一种情况下:先前进i
然后读取它。
如果有更简单的方法从字符数组中提取数字
它太宽泛了。您的字符串具有特定的格式,因此您知道何时应该读取 int 值并且stoi
会这样做,在迭代提取的字符串项时需要小心。
推荐阅读
- spring - 无法从 SpringBoot 以字符串或 ModelAndView 的形式返回 HTML 文件
- mysql - 使用用户模型验证用户,我在 phpmyadmin 中创建了用户表并与 django 连接。然后将其迁移到应用程序
- java - 将 SpringBoot 应用程序推送到 heroku 时预接收挂钩被拒绝
- symfony - Mercure/Symfony:使用 JWT 密钥的授权错误
- python - StartsWith 函数 Python
- ios - 数据源加载完成后,SwiftUI NavigationView 会自行弹出
- java - 从 Java 中的 JSON Schema 获取可用属性(可能是递归的)
- node.js - 如何在Node js中将自动url传递给http协议
- python - 如何将记录器信息发送到 seq
- c++ - Clion 如何添加调试标志?