1

我正在尝试编写一个函数,该函数将字符串数组作为参数,将其转换为 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 {aka std::basic_string}”转换为“const char*”参数'1'到'int atoi(con​​st char *)'GameHandler.cpp:71:12:错误:从'int *'到'int'的无效转换[-fpermissive] GameHandler.cpp:61:9:警告:地址返回的局部变量“值”[默认启用]

4

5 回答 5

2

atoi 的签名是

int atoi(const char *str);

因此,在您的情况下,您需要将 const char* 传递给 atoi:

tmp=atoi(arr[i].c_str());
于 2012-10-10T14:21:31.237 回答
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);

请注意以下事项:

  • 整数值[20];// 这是堆栈上的一个数组,其内存在封闭块之外不可用(例如函数)
  • string array[] // 未知大小的数组;对于动态大小(在运行时设置),您可能想要使用 std::vector,它通过 size() 成员函数知道它的大小
于 2012-10-10T14:37:29.017 回答
0

您需要获取const char*. std:string您可以使用类c_str()中的方法来完成std:string

http://www.cplusplus.com/reference/string/string/c_str/

于 2012-10-10T14:21:19.693 回答
0

除了atoi错误之外,这一行也是不正确的。

string arr[20]=array;

您不能在 C++ 中复制这样的数组。

只需删除上面的行并替换

tmp=atoi(arr[i]);

tmp=atoi(array[i].c_str());

不需要复制字符串数组来做你想做的事情。

于 2012-10-10T14:39:36.993 回答
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());
    }
}
于 2012-10-10T14:49:51.577 回答