Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển chuỗi sang số nguyên (atoi) trong C++


Thiết kế module: loại bỏ các ký tự khoảng trắng (whitespace) cho đến khi gặp ký tự không phải khoảng trắng đầu tiên. Từ ký tự đó, lấy dấu + hoặc - tùy chọn, theo sau là các chữ số, chuyển thành giá trị số.

Nếu chuỗi không bắt đầu bằng số hợp lệ, hoặc rỗng/chỉ có khoảng trắng → không chuyển đổi.

Ví dụ: input "-45" → output -45.

Giải pháp:

  • sign := 1, base := 0, i := 0, n := độ dài chuỗi.
  • While i < n và str[i] là khoảng trắng → i++.
  • Nếu ký tự đầu là '-' → sign := -1, ngược lại sign := 1.
  • While str[i] trong '0'..'9':
    • Đọc từng ký tự chuyển sang số, cập nhật base = base*10 + (str[i]-'0').
  • Trả về base * sign.

Ví dụ C++

#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;
                else return INT_MIN;
            }
            base = (base * 10) + (str[i++] - '0');
        }
        return base * sign;
    }
};

int 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