c# - 不使用乘法C#将字符串转换为整数

标签 c# string int

有没有一种方法可以在不使用乘法的情况下将字符串转换为整数。 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/

相关文章:

ruby-on-rails - 如何在 Rails 应用程序中使用长 id?

python - 将长整数列表转换为整数

c# - 从整数列表中获取随机数

c# - 延迟加载问题

c# - kendo 将数据提取到 pdf 文件在 asp.net mvc 中不起作用

python - 带有字符串格式参数的模板

mysql - 从路径MYSQL中提取文件名

c# - 将 C# 移植到 javascript 会导致范围问题

c# - XNA 内容管道教程

c - 了解 while 循环中的字符指针