编写自己的 atoi()的 Javascript 程序

原文:https://www . geesforgeks . org/JavaScript-program-to-write-your-atoi/

C 语言中的 atoi()函数以一个字符串(代表一个整数)为参数,返回其 int 类型的值。所以基本上这个函数是用来把字符串参数转换成整数的。

语法:

int atoi(const char strn)

参数:该函数接受一个参数 strn ,该参数是指需要转换为其整数等价物的字符串参数。

返回值:如果 strn 是有效的输入,则函数返回传递的字符串数字的等效整数。如果没有发生有效的转换,则函数返回零。

现在让我们来理解一个人可以在各种条件支持下创建自己的 atoi()函数的各种方式:

方法 1: 以下是一个简单的转换实现,不考虑任何特例。

  • 将结果初始化为 0。
  • 从第一个字符开始,更新每个字符的结果。
  • 对于每个字符,将答案更新为结果=结果 10+(s[I]–‘0’)*

java 描述语言

<script>
// A simple Javascript program for
// implementation of atoi

// A simple atoi() function
function myAtoi(str)
{
    // Initialize result
        let res = 0;

        // Iterate through all characters
        // of input string and update result
        // take ASCII character of corresponding digit and
        // subtract the code from '0' to get numerical
        // value and multiply res by 10 to shuffle
        // digits left to update running total
        for (let i = 0; i < str.length; ++i)
            res = res * 10 + str[i].charCodeAt(0) - '0'.charCodeAt(0);

        // return result.
        return res;
}

// Driver code
let str = "89789";

// Function call
let val = myAtoi(str);
document.write(val);

// This code is contributed by rag2127
</script>

Output

89789

方法 2: 这个实现处理负数。如果第一个字符是“-”,则将符号存储为负数,然后使用前面的方法将字符串的其余部分转换为数字,同时将符号与数字相乘。

java 描述语言

<script>

    // JavaScript program for implementation of atoi

    // A simple atoi() function
    function myAtoi(str)
    {

        // Initialize result
        var res = 0;

        // Initialize sign as positive
        var sign = 1;

        // Initialize index of first digit
        var i = 0;

        // If number is negative, then
        // update sign
        if (str[0] == '-') {
            sign = -1;

            // Also update index of first
            // digit
            i++;
        }

        // Iterate through all digits
        // and update the result
        for (; i < str.length; ++i)
            res = res * 10 + str[i].charCodeAt(0) - '0'.charCodeAt(0);

        // Return result with sign
        return sign * res;
    }

      // Driver code
          var str = "-129";
          var val=myAtoi(str);
        document.write(val);

</script>
 <! --This code is contributed by nirajgusain5 -->

Output

-123

方法 3: 这个实现处理各种类型的错误。如果字符串为空或字符串包含非数字字符,则返回 0,因为该数字无效。

Output

 -134

进场 4: 需要处理的四角案件:

  • 丢弃所有前导空格
  • 数字的符号
  • 泛滥
  • 无效输入

要删除前导空格,请运行一个循环,直到到达数字的某个字符。如果该数字大于或等于 INT_MAX/10。然后如果符号为正,返回 INT_MAX,如果符号为负,返回 INT_MIN。其他情况在以前的方法中处理。

试运行:

下面是上述方法的实现:

java 描述语言

<script>
// A simple JavaScript program for
// implementation of atoi
    function myAtoi(str)
   {
    var sign = 1, base = 0, i = 0;

    // if whitespaces then ignore.
    while (str[i] == ' ') 
    {
        i++;
    }

    // sign of number
    if (str[i] == '-' || str[i] == '+') 
    {
        sign = 1 - 2 * (str[i++] == '-');
    }

    // checking for valid input
    while (str[i] >= '0' && str[i] <= '9') 
    {
        // handling overflow test case
        if (base > Number.MAX_VALUE/ 10
            || (base == Number.MAX_VALUE / 10 
            && str[i] - '0' > 7)) 
        {
            if (sign == 1)
                return Number.MAX_VALUE;
            else
                return Number.MAX_VALUE;
        }
        base = 10 * base + (str[i++] - '0');
    }
    return base * sign;
}

    // Driver code
        var str = " -123";

        // Function call
        var val = myAtoi(str);
        document.write(" ", val);

// This code is contributed by shivanisinghss2110
</script>

Output

 -123

上述所有方法的复杂性分析:

  • 时间复杂度: O(n)。 只需要遍历一次字符串。
  • 空间复杂度: O(1)。 因为不需要额外的空间。

atoi()的递归程序。

练习: 写你的韩元 atof() 该函数将一个字符串(代表一个浮点值)作为参数,并将其值作为 double 返回。

更多详情请参考写自己的 atoi() 整篇文章!