JavaScript 编程编写自己的atoi()

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程