将字符串数组转换为 int 数组
Convert a string array to a int array
我正在尝试编写一个函数,该函数将字符串数组作为参数,将其转换为 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/
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 按字符值访问int数组
- 将 int 数组转换为 std::vector<int*>
- 比较if语句中的数组值和int值
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 在c++中获取两个大int,并将它们存储在数组中
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 有没有办法用 2D 数组 (int) 重载构造函数?
- 当大小未知时,如何迭代指向数组 (int*) 的指针?
- 接受来自函数的二维数组(int 类型)并将其返回到主函数
- 数组 + int 作为一个参数做什么
- 如何制作'bit'数组而不是数组'int'?
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 为[z][y][x]int定义数组int[x][y][z]有什么好处?
- 用Visual c++编写二维数组int[n][m]到HDF5文件
- 数组int未正确返回
- 将元素推送到动态分配的指针数组int C++
- 如何在另一个数组中插入多维数组(int而非char)
- 将数组(int*)设置为NULL是否释放其占用的内存
- C++如何将数组 int[10] push_back std::vector<int[10]>?