将字符串数组转换为int数组

时间:2012-10-10 14:18:02

标签: c++ linux arrays type-conversion

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

5 个答案:

答案 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方法执行此操作。

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

答案 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);

注意以下事项:

  • int values [20]; //这是堆栈上的一个数组,其内存在封闭块之外无法使用(例如函数)
  • string array [] //未知大小的数组;对于动态大小(在运行时设置),您可能希望使用std :: vector,它通过size()成员函数知道其大小

答案 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());
    }
}