JavaScript编写自己的atoi()函数
在C语言中,我们有一个函数,它接受一个字符串或字符数组作为参数,并返回一个整数,该整数可能由给定的字符串表示。如果当前字符串无效,则它只读取到第一个有效索引,并返回该值。我们将看到完整的代码及其解释。
示例
输入1
string S = "-9845"
输出1
-9845
解释
我们得到一个表示数字的字符串,因此我们得到了相同的输出。
输入2
string str = "90 uy78"
输出2
Invalid Input
解释
给定的字符串不是有效的整数,因为它包含小写英文字符和空格。因此,我们根据它给出了输出。
输入3
string str = "539"
输出3
539
字符串有效
我们已经看到了上面的例子,现在让我们来看一下实现的步骤。
首先,我们将创建一个函数,该函数将字符串作为输入,并返回整数作为返回值。
在函数中,首先我们将创建一个函数来检查或存储给定的数字是否为负数,方法是检查字符串的第一个字符。
如果第一个字符是减号,那么我们将从索引1开始遍历字符串,否则从索引0开始。
我们将创建一个变量来存储结果,并将其初始化为零。
在每次迭代中,我们将当前整数乘以10,然后将当前数字加到它上面。
要将字符串数字转换为整数值,我们将使用parseInt()函数,该函数接受字符或字符串作为输入,并输出整数值。
最后,我们将返回最终答案,然后打印它。
示例
// function to convert the string to an integer function atoi(str){ // Assuming the string is valid var neg = 1 // checking for the negative number if(str[0] == '-'){ neg = -1 } var ans = 0; var i = 0; // if the number is the negative number then start from the next index if(neg == -1){ i = i + 1 } while (i < str.length){ ans = ans * 10 + parseInt(str[i]); i = i + 1; } ans = ans* neg return ans; // returning the answer } // defining the input and calling the function str = "-4578038"; // calling the function var ans = atoi(str); // printing the answer console.log("The value of the current number is: " + ans);
输出
The value of the current number is: -4578038
时间和空间复杂度
上述代码的时间复杂度为O(N),其中N是给定字符串中字符的数量。
上述代码的空间复杂度为O(1),因为我们没有使用任何额外的空间。
字符串可能无效
我们将对大多数函数使用之前的代码,但主要的是我们必须检查给定的字符串是否有效。如果字符串无效,则我们必须找到它,为此我们将创建一个函数,该函数将接受单个字符作为参数并返回布尔值。
我们将通过此函数检查字符串是否包含任何空格或其他非数字字符。
示例
// function to check if the current character is digit or not function check(cha){ for(var i = '0'; i <= '9'; i++){ if(cha == i){ return true; } } return false; } // function to convert the string to an integer function atoi(str){ // Assuming the string is valid var neg = 1 // checking for the negative number if(str[0] == '-'){ neg = -1 } var ans = 0; var i = 0; // if the number is the negative number then start from the next index if(neg == -1){ i = i + 1 } while (i < str.length){ // checking for the invalid case if(check(str[i]) == false){ console.log("The given string represents the invalid number"); return; } ans = ans * 10 + parseInt(str[i]); i = i + 1; } ans = ans* neg // printing the answer console.log("The value of the current number is: " + ans); } // defining the input and calling the function str = "0987653"; // calling the function atoi(str);
输出
The value of the current number is: 987653
时间和空间复杂度
上述代码的时间复杂度为O(N),其中N是给定字符串中字符的数量。
上述代码的空间复杂度为O(1),因为我们没有使用任何额外的空间。
结论
在本教程中,我们实现了一个JavaScript程序,用于将字符串形式的数字转换为整数。我们遍历了字符串并检查当前字符串是否表示有效数字。我们创建了一个函数,该函数将检测字符串的当前字符是否为数字。