我正在尝试编写一个函数,该函数将字符串数组作为参数,将其转换为int数组,然后返回新数组。我认为使用“Atoi”会很简单,但显然你不能按照我的方式使用它。
这是我目前的代码。
int GameHandler::convertToInt(string array[])
{
int tmp=0;
string arr[20]=array;
int values[20];
for(int i=0;i<20;i++)
values[i]=0;
for(int i=0;i<20;i++)
{
tmp=atoi(arr[i]);
values[i]=tmp;
}
return values;
}
以下是我从编译器获取的错误信息:
GameHandler.cpp:在成员函数'int中 GameHandler :: convertToInt(std :: string *)':GameHandler.cpp:60:20: 错误:从'std :: string * {aka std :: basic_string *}'转换 到非标量类型'std :: string {aka std :: basic_string}' 请求GameHandler.cpp:67:24:错误:无法转换'std :: string 对于参数'1',{aka std :: basic_string}'到'const char *' 'int atoi(const char *)'GameHandler.cpp:71:12:错误:无效 从'int *'转换为'int'[-fpermissive] GameHandler.cpp:61:9: 警告:返回局部变量'values'的地址[启用 默认]
答案 0 :(得分:2)
atoi的签名是
int atoi(const char *str);
因此,在您的情况下,您需要将const char *传递给atoi:
tmp=atoi(arr[i].c_str());
答案 1 :(得分:0)
您需要获取const char*
的基础std:string
。您可以使用c_str()
类中的std:string
方法执行此操作。
答案 2 :(得分:0)
对你来说有用的是具有(更好)静态功能的解决方案:
const int ELEM_CNT = 20;
static void convertToInt(string const strings[ELEM_CNT], int ints[ELEM_CNT])
{
for (int i=0; i<ELEM_CNT; ++i)
ints[i] = atoi(strings[i].c_str());
}
[...]
string sArr[ELEM_CNT];
int iArr[ELEM_CNT];
convertToInt(sArr, iArr);
注意以下事项:
答案 3 :(得分:0)
除atoi
错误外,此行也不正确。
string arr[20]=array;
你不能在C ++中复制这样的数组。
只需删除上面的行并替换
即可tmp=atoi(arr[i]);
与
tmp=atoi(array[i].c_str());
无需复制字符串数组即可。
答案 4 :(得分:0)
我建议不要使用C风格的数组。
void GameHandler::convertToInt(std::vector<int>& values,
const std::vector<std::string>& array)
{
values.resize(array.size());
for(int i=0;i!=array.size();i++)
{
values[i]=atoi(array[i].c_str());
}
}