/* 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 ++的新手,所以我无法调试。
是否有更简单的方法从字符数组中提取数字?
答案 0 :(得分:1)
您的代码
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
之间存在差异。在前一种情况下:读取i
和前进i
所指向的值,在后一种情况下:前进i
然后读取它。
如果有更简单的方法可以从字符中提取数字 数组
它太宽泛了。您的字符串具有特定的格式,因此您知道应该读取int值并且stoi
会这样做时,在迭代提取的字符串项时需要小心。