Computer >> Máy Tính >  >> Lập trình >> C ++

Chuỗi thành số nguyên (atoi) trong C ++


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

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

Vì vậy, nếu đầu vào là "-45", đầu ra sẽ là -45.

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau -

  • dấu hiệu:=1, cơ số:=0, i:=0, n:=kích thước của chuỗi s
  • trong khi i
  • nếu ký tự đầu tiên là - thì ký hiệu:=-1, nếu không ký tự:=1
  • while s [i] trong dải ô từ ‘0’ đến ‘9’
    • đọc từng ký tự và chuyển nó thành số nguyên, sau đó điều chỉnh phép tính cơ số bằng cách tăng cơ số cho mỗi ký tự.
  • trả lại số * dấu

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int myAtoi(string str) {
      int sign = 1;
      int base = 0;
      int i = 0;
      int n = str.size();
      while(i < n && str[i] == ' '){
         i++;
      }
      if(str[i] == '-' || str[i] == '+') sign = 1 - 2*(str[i++] =='-');
      while(str[i] >= '0' && str[i] <='9'){
         if(base > INT_MAX/10 || base == INT_MAX/10 && str[i]- '0' > INT_MAX %10){
            if(sign == 1)return INT_MAX;
               return INT_MIN;
            }
            base = (base * 10) + (str[i++] - '0');
         }
         return base * sign;
   }
};
main(){
   Solution ob;
   cout << ob.myAtoi("-45")<<endl;
   cout << ob.myAtoi(" 56")<<endl;
   cout << ob.myAtoi("100")<<endl;
}

Đầu vào

"-45"
" 56"
"100"

Đầu ra

-45
56
100