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

Convert a string array to a int array

本文关键字:数组 int 转换 字符串      更新时间:2023-10-16

我正在尝试编写一个函数,该函数将字符串数组作为参数,将其转换为 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}' 请求的游戏处理程序.cpp:67:24:错误:无法转换"std::字符串" {aka std::basic_string}' to 'const char*' for argument '1' to 'int atoi(const char*)' 游戏处理程序.cpp:71:12:错误:无效 从 'int*' 到 'int' 的转换 [-fpermissive] GameHandler.cpp:61:9: 警告:返回局部变量"值"的地址 [启用者 默认]

atoi 的签名是

int atoi(const char *str);

因此,您需要将常量字符*传递给atoi,在您的情况下:

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

可能对您有用的是这个带有(更好的)静态函数的解决方案:

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 值[20];//这是堆栈上的一个数组,其内存在封闭块之外不可用(例如函数)
  • 字符串数组[]//未知大小的数组;对于动态大小(在运行时设置),您可能希望使用 std::vector,它通过 size() 成员函数知道它的大小

除了atoi错误外,此行也不正确。

string arr[20]=array;

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

只需删除上面的行并替换

tmp=atoi(arr[i]);

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

无需复制要执行的操作的字符串数组。

我建议不要使用 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());
    }
}

您需要获取std:string的底层const char*。您可以使用 std:string 类中的 c_str() 方法执行此操作。

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