[英]How can I convert a string to an int in c++ when I'm not using a standard string?
我正在构建自己的字符串类,我正在尝试使用此函数将数字字符串转换为整数:
int String::convertToInt() const {
int exp = length() - 1;
int result = 0;
for(int i = 0; i < length(); ++i) {
result += (charAt(i) - '0') * (10 ^ exp);
--exp;
}
return result;
}
有些东西不能正常工作,但我无法找出它是什么。 当我尝试将“49”转换为int时,它将其转换为134。
^
是异或。 我相信你正在寻找std::pow(10, exp)
。
甚至这个:
int String::convertToInt() const {
int order = std::pow(10, length() - 1);
int result = 0;
for(int i = 0; i < length(); ++i) {
result += (charAt(i) - '0') * order;
order /= 10;
}
return result;
}
最简单的方法是认识到49
是4 * 10 + 9
493
同样是49 * 10 + 3
。
也就是说,结果是前N-1个数字加上最后一个数字的10倍。 您可以将其写为循环或递归函数。 堆叠深度不会伤害你; 在大约20位数之后,即使是64位结果也会溢出。 所以
int String::convertToInt() const {
if (empty()) return 0; // Recursive functions better terminate.
// TODO: negative numbers.
return 10 * convertToInt(substr(0, length()-1)) + (back() - '0');
}
要么
int String::convertToInt() const {
// TODO: negative numbers.
int result = 0;
for(int i = 0; i < length(); ++i) {
result * = 10;
result += (charAt(i) - '0');
}
return result;
}
一种更有效的方法是:
// I know you said you are using something else
// but the same principle applies here
std::string s = "12345";
unsigned int result = 0;
unsigned int place = 1;
for (std::size_t i = s.length() - 1; i >= 0; --i, place *= 10)
{
result += (s[i] - '0') * place;
}
基本上,你从最右边的角色开始,按照自己的方式工作。 你移动的每个角色,你将你的place
乘以10(非常类似于我们大多数人学习增加成长的方法:添加你的1 ...添加你的10 ...添加你的100 ...等等。 这也假设你已经知道字符串只包含数字字符('0' - '9')。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.