C++ 我可以使用 string::at 分配一个 int 吗?
C++ Can I assign an int by using string::at?
在我的代码中我有这个:
int enemyNumber = numberType.at(0);
numberType
是一个字符串。
string numberType
中的第一个字符是“1”。但是 int enemyNumber
在该赋值后变为 48。
这是怎么回事,如何让 enemyNumber 变为“1”?
这是因为48是1
的字符编码。要改为获取整数值,请推导出 '0'
,即写类似:int enemyNumber = numberType.at(0) - '0';
。这样就得到'1'
的字符编码减去'0'
的字符编码即1
。这将适用于所有数字,因为它们的字符代码是连续的数字。
将'0'
到'9'
的单个字符转换为对应的数字,减去'0'
的值:
int enemyNumber = numberType.at(0) - '0';
如果你想转换包含多个数字的字符串,标准库可以提供帮助:
// C++11 or later
int n = std::stoi(s);
// Historically
int n = std::atoi(s.c_str()); // no error checking
std::istringstream ss(s);
if (ss >> n) {
// success
}
如果您想留在字符串对象中,可以执行以下操作:
#include <string>
#include <iostream>
int main()
{
std::string numberType("1234");
const int enemyNumber = std::stoi( numberType.substr(0,1) );
std::cout << enemyNumber;
return 0;
}
stoi() 将为您完成从字符串到整数的转换。
在我的代码中我有这个:
int enemyNumber = numberType.at(0);
numberType
是一个字符串。
string numberType
中的第一个字符是“1”。但是 int enemyNumber
在该赋值后变为 48。
这是怎么回事,如何让 enemyNumber 变为“1”?
这是因为48是1
的字符编码。要改为获取整数值,请推导出 '0'
,即写类似:int enemyNumber = numberType.at(0) - '0';
。这样就得到'1'
的字符编码减去'0'
的字符编码即1
。这将适用于所有数字,因为它们的字符代码是连续的数字。
将'0'
到'9'
的单个字符转换为对应的数字,减去'0'
的值:
int enemyNumber = numberType.at(0) - '0';
如果你想转换包含多个数字的字符串,标准库可以提供帮助:
// C++11 or later
int n = std::stoi(s);
// Historically
int n = std::atoi(s.c_str()); // no error checking
std::istringstream ss(s);
if (ss >> n) {
// success
}
如果您想留在字符串对象中,可以执行以下操作:
#include <string>
#include <iostream>
int main()
{
std::string numberType("1234");
const int enemyNumber = std::stoi( numberType.substr(0,1) );
std::cout << enemyNumber;
return 0;
}
stoi() 将为您完成从字符串到整数的转换。