JavaScript 编程编写自己的atoi()
在C编程语言中,我们有一个函数,它以单个字符串或字符数组作为参数,并返回可以由给定字符串表示的整数,如果当前字符串无效,则仅读取到第一个有效索引并返回该值。我们将看到完整的带解释的代码。
示例示例
输入1
string S = "-9845"
输出 1
-9845
解释
我们被给予一个表示数字的字符串,所以我们只是得到相同的输出。
输入2:
string str = "90 uy78"
输出2
Invalid Input
解释
给定的字符串不是一个有效的整数,因为它包含小写英文字母和空格。因此,我们根据这个给出了输出。
输入:3
string str = "539"
输出3
539
字符串有效
我们已经看过上面的示例,现在让我们来看一下实现的步骤。
- 首先,我们将创建一个函数,该函数将以字符串为输入,并将整数作为返回值。
-
在函数中,首先我们将创建一个函数来检查或存储给定的数字是否为负数,方法是检查字符串的第一个字符。
-
如果第一个字符是减号,那么我们将从第一个索引开始遍历字符串,否则从零索引开始。
-
我们将创建一个变量来存储结果,并将其初始化为零。
-
在每次迭代中,我们将当前整数乘以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程序,将以字符串形式表示的数字转换为整数。我们遍历了字符串并检查当前字符串是否表示一个有效的数字。我们创建了一个函数,用于检测字符串的当前字符是否是数字。