首页 > 解决方案 > 在不使用乘法 C# 的情况下将字符串转换为整数

问题描述

有没有一种方法可以在不使用乘法的情况下将字符串转换为整数。int.Parse() 的实现也使用乘法。我还有其他类似的问题,您可以手动将字符串转换为 int,但这也需要将数字乘以 10。这是我在一次采访中遇到的面试问题,我似乎找不到任何答案。

标签: c#stringint

解决方案


如果您假设一个基数为 10 的数字系统并用位移代替乘法(参见此处),这可以是正整数的解决方案。

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'

编辑:

对于负整数,这个版本(见这里)有效。

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;
}

一般来说,您应该考虑错误,例如空检查、其他非数字字符的问题等。


推荐阅读