【问题标题】:Convert a string array to a int array [closed]将字符串数组转换为 int 数组 [关闭]
【发布时间】:2012-10-10 14:18:01
【问题描述】:

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

【问题讨论】:

  • 您是否尝试理解错误代码?
  • 该函数不接受字符串数组,它接受一个指向字符串的指针。

标签: c++ linux arrays type-conversion


【解决方案1】:

atoi的签名是

int atoi(const char *str);

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

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

【讨论】:

  • 我用 tmp=atoi(arr[i].c_str()); 替换了该行编译时仍然出错。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    string arr[20]=array;
    

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

    只需删除上面的行并替换

    tmp=atoi(arr[i]);
    

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

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

    【讨论】:

    • 好吧,完成了,解决了一些错误 现在,调试器给了我以下错误: GameHandler.cpp:71:12: error: invalid conversion from 'int*' to ' int' [-fpermissive]
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      您需要获取std:string 的底层const char*。您可以使用std:string 类中的c_str() 方法来实现。

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

      【讨论】:

      • cplusplus.com 不被视为 C++ 信息的可靠来源
      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多