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程序,用于将字符串形式的数字转换为整数。我们遍历了字符串并检查当前字符串是否表示有效数字。我们创建了一个函数,该函数将检测字符串的当前字符是否为数字。

更新于: 2023年7月11日

153 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告