有没有一种方法可以在不使用乘法的情况下将字符串转换为整数。 int.Parse()的实现也使用乘法。我还有其他类似的问题,您可以在其中手动将字符串转换为int,但这还需要将数字乘以10为底。这是我在一次采访中遇到的一个采访问题,我似乎找不到任何答案。
最佳答案
如果您假设以10为底的数字系统并乘以位移(see here),则可以解决正整数的问题。
public int StringToInteger(string value)
{
int number = 0;
foreach (var character in value)
number = (number << 1) + (number << 3) + (character - '0');
return number;
}
请参阅ideone上的示例。
唯一的假设是,字符
'0'
到'9'
在字符集中彼此紧邻。使用character - '0'
将数字字符转换为整数值。编辑:
对于负整数,此版本(see here)有效。
public static int StringToInteger(string value)
{
bool negative = false;
int i = 0;
if (value[0] == '-')
{
negative = true;
++i;
}
int number = 0;
for (; i < value.Length; ++i)
{
var character = value[i];
number = (number << 1) + (number << 3) + (character - '0');
}
if (negative)
number = -number;
return number;
}
通常,您应该考虑错误,例如空检查,其他非数字字符的问题等。
关于c# - 不使用乘法C#将字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819718/