Chuỗi thành số nguyên (atoi) javascript

Tìm hiểu cách tạo hàm tùy chỉnh của bạn giống như ATOI để chuyển đổi chuỗi thành số nguyên mà không cần sử dụng bất kỳ phương thức nội bộ nào

Thí dụ

Input:
"-123"
"123"

Output:
-123
123

Chuỗi thành số nguyên (atoi) javascript
Chuỗi thành số nguyên (atoi) javascript

Chúng ta sẽ xem cả giải pháp lặp và đệ quy cho việc này

Lặp đi lặp lại chuyển đổi chuỗi thành số nguyên (ATOI)

Để chuyển đổi bất kỳ chuỗi nào thành số nguyên, chúng ta cần xử lý bốn trường hợp góc

  1. Đâu vao không hợp lệ
  2. Khoảng trắng (đầu và cuối)
  3. Dấu hiệu của số (âm hoặc dương)
  4. Tràn (trong trường hợp số lượng vượt quá giới hạn)

Chúng ta sẽ phải đưa ra một giải pháp bằng cách ghi nhớ tất cả các trường hợp này

  • Trước tiên, chúng tôi sử dụng một biến để theo dõi các khoảng trắng ở đầu vì sau đó, số sẽ bắt đầu
  • Sau đó kiểm tra xem ký tự đầu tiên là số hay dấu. Nếu đó là một dấu hiệu thì lưu trữ giá trị phù hợp dựa trên loại dấu hiệu. 1 cho tích cực và -1 cho tiêu cực
  • Để chuyển đổi một chuỗi thành số, chúng tôi sử dụng chênh lệch giá trị ASCII của ký tự hiện tại với ký tự '0' và sau đó tiếp tục cộng chuỗi đó với tổng trước đó nhân với 10
  • Trong mỗi cuộc gọi, hãy kiểm tra xem số được tạo có vượt quá giới hạn hay không. Nếu nó vượt quá thì dựa trên dấu hiệu là số dương hoặc số âm trả về giới hạn tối đa của nó
  • Cuối cùng trả về số mới nhân với giá trị dấu
const iterativeATOI = (str) => {
   let sign = 1; base = 0; i = 0;
   
   //Ignore the leading white spaces
   while(str[i] === ''){
     i++;
   }
  
   // Decide sign of number 
   if (str[i] == '-' || str[i] == '+') { 
       sign = 1 - 2 * (str[i++] == '-' ? 1 : 0); 
   } 
  
  // Checking for valid input 
  while (i < str.length && 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 Integer.MAX_VALUE;
           }
           else{
              return Integer.MIN_VALUE; 
           }
        }
        //For the new number
        base = 10 * base + (str[i++] - '0'); 
     } 
  
   //Return the number
   return base * sign;
} 
Input:
console.log(iterativeATOI("-123"));
console.log(iterativeATOI("+123"));
console.log(iterativeATOI("/123"));

Output:
-123
123
0 // for invalid inputs

Độ phức tạp về thời gian. Trên);
Độ phức tạp của không gian. O(1);


Giải pháp đệ quy để chuyển đổi chuỗi thành số nguyên trong javascript

Chúng ta có thể dễ dàng chuyển đổi giải pháp lặp lại thành giải pháp đệ quy. Tất cả những gì chúng ta cần làm là tạo một hàm bổ sung sẽ gọi đệ quy chính nó để chuyển đổi chuỗi

Thực hiện atoi để chuyển đổi một chuỗi thành một số nguyên. Đầu tiên, hàm loại bỏ càng nhiều ký tự khoảng trắng càng…

mật mã. com

Thực hiện atoi để chuyển đổi một chuỗi thành một số nguyên

Trước tiên, hàm loại bỏ bao nhiêu ký tự khoảng trắng cần thiết cho đến khi tìm thấy ký tự không phải khoảng trắng đầu tiên. Sau đó, bắt đầu từ ký tự này, lấy một dấu cộng hoặc dấu trừ ban đầu tùy chọn, theo sau là càng nhiều chữ số càng tốt và diễn giải chúng dưới dạng một giá trị số

Chuỗi có thể chứa các ký tự bổ sung sau các ký tự tạo thành số nguyên, các ký tự này bị bỏ qua và không ảnh hưởng đến hoạt động của hàm này

Nếu chuỗi đầu tiên của các ký tự không phải khoảng trắng trong str không phải là một số nguyên hợp lệ hoặc nếu không có chuỗi nào như vậy tồn tại vì str trống hoặc nó chỉ chứa các ký tự khoảng trắng, thì không có chuyển đổi nào được thực hiện

Nếu không thể thực hiện chuyển đổi hợp lệ, giá trị 0 được trả về

Ghi chú

  • Chỉ ký tự khoảng trắng ‘ ‘ được coi là ký tự khoảng trắng
  • Giả sử chúng ta đang xử lý một môi trường chỉ có thể lưu trữ các số nguyên trong phạm vi số nguyên có dấu 32 bit. [−231, 231 − 1]. Nếu giá trị số nằm ngoài phạm vi giá trị có thể biểu thị, INT_MAX (231 − 1) hoặc INT_MIN (−231) được trả về

ví dụ 1

Input: "42"
Output: 42

ví dụ 2

Input: "   -42"
Output: -42
Explanation: The first non-whitespace character is '-', which is the minus sign.
Then take as many numerical digits as possible, which gets 42.

ví dụ 3

Input: "4193 with words"
Output: 4193
Explanation: Conversion stops at digit '3' as the next character is not a numerical digit.

Ví dụ 4

Input: "words and 987"
Output: 0
Explanation: The first non-whitespace character is 'w', which is not a numerical
digit or a +/- sign. Therefore no valid conversion could be performed.

Ví dụ 5

Input: "-91283472332"
Output: -2147483648
Explanation: The number "-91283472332" is out of the range of a 32-bit signed integer.
Thefore INT_MIN (−231) is returned.

thuật toán

1 Vì hàm loại bỏ càng nhiều khoảng trắng càng tốt cho đến khi tìm thấy ký tự không phải khoảng trắng đầu tiên, trước tiên chúng ta có thể tiếp tục và cắt chuỗi đã cho, trước đó chúng ta có thể kiểm tra xem nó có rỗng không và nếu có thì trả về 0

2 Sau khi cắt, nếu độ dài chuỗi bằng 0, tức là chuỗi rỗng, thì trả về 0 luôn

3 Để quan tâm đến dấu + hoặc — tùy chọn, chúng tôi kiểm tra xem ký tự đầu tiên của chuỗi là '+' hay '-' và nếu vậy, chúng tôi sẽ tăng start Index từ giá trị ban đầu là 0. Nếu ký tự đầu tiên là '-' thì chúng ta chuyển boolean isNegative được khởi tạo ban đầu thành false, thành true

4 Để xử lý trường hợp số, chúng tôi lấy ký tự thứ i từ chuỗi và trừ nó bằng '0' và chuyển kết quả thành int và lưu trữ trong một biến sốDigital. Và cập nhật biến kết quả của chúng tôi để tạo lại giá trị số dưới dạng kết quả * 10 + DigitValue. Trước khi quan tâm đến trường hợp số, phải cẩn thận để đảm bảo rằng ký tự hiện tại không nằm ngoài phạm vi asci của '0' hoặc '9'. Nếu đúng như vậy thì theo quy tắc đã cho, ta ngắt khỏi chuỗi lặp để trả về kết quả, với điều kiện nhất định

5 Nếu isNegative là đúng, thì chúng tôi chuyển đổi kết quả để trỏ đến phiên bản phủ định của giá trị của nó

6 Nếu kết quả thuộc loại double, nhỏ hơn Integer. MIN_VALUE, sau đó chúng tôi trả về Số nguyên. MIN_VALUE. Tương tự như vậy nếu kết quả lớn hơn Integer. MAX_VALUE thì chúng tôi trả về Số nguyên. GIÁ TRỊ TỐI ĐA. Điều này sẽ xử lý các trường hợp tràn và tràn số nguyên

7 Cuối cùng, chúng tôi chuyển kết quả trở lại int và trả về giá trị được chuyển đổi kết quả

Bài kiểm tra

1 Kiểm tra với nhiều dấu + — liên tiếp với nhau, theo sau là giá trị số hoặc văn bản, sẽ trả về 0, vì sau dấu tùy chọn đầu tiên, không có giá trị số

2 Thử nghiệm với các giá trị kết quả tràn và tràn

3 Kiểm tra với chuỗi rỗng

4 Kiểm tra với các từ xen kẽ với các số. Kiểm tra với các số xen kẽ với dấu + —

Giải pháp

Phân tích độ phức tạp

Vì chúng ta kết thúc việc lặp qua toàn bộ chuỗi trong trường hợp xấu nhất, nên độ phức tạp thời gian là T O(n), do chúng ta không sử dụng bất kỳ không gian phụ trợ nào, S O(1)

Làm cách nào để chuyển đổi chuỗi JavaScript thành số nguyên?

Trong JavaScript hàm parseInt() (hoặc một phương thức) được sử dụng để chuyển đổi tham số hoặc giá trị chuỗi được truyền vào thành một giá trị số nguyên. This function returns an integer of the base which is specified in the second argument of the parseInt() function.

Atoi có hoạt động trên chuỗi không?

Hàm atoi() chuyển đổi chuỗi ký tự thành giá trị số nguyên . Chuỗi đầu vào là một chuỗi các ký tự có thể được hiểu là một giá trị số của kiểu trả về được chỉ định. Hàm dừng đọc chuỗi đầu vào ở ký tự đầu tiên mà nó không thể nhận ra là một phần của số.

Làm cách nào để chuyển đổi chuỗi thành int C?

Trong C, hàm atoi() chuyển chuỗi thành số nguyên. .
Nếu thực hiện thành công, hàm trả về giá trị nguyên
Nếu chuỗi bắt đầu bằng ký tự chữ và số hoặc chỉ chứa ký tự chữ và số, 0 được trả về

Atoi có nhanh không?

Atoi là cách nhanh nhất mà tôi có thể nghĩ ra . Tôi đã biên dịch bằng msvc 2010 để có thể kết hợp cả hai mẫu. Trong msvc 2010, khi tôi kết hợp các mẫu, trường hợp bạn cung cấp đối số cb chậm hơn.