Cập nhật cho C ++ 11
Theo C++11
tiêu chuẩn, chuyển đổi chuỗi thành số và ngược lại được tích hợp sẵn trong thư viện tiêu chuẩn. Tất cả các chức năng sau đây đều có trong <string>
(theo đoạn 21.5).
chuỗi thành số
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Mỗi trong số này lấy một chuỗi làm đầu vào và sẽ cố gắng chuyển đổi nó thành một số. Nếu không có số hợp lệ nào có thể được tạo, chẳng hạn như vì không có dữ liệu số hoặc số nằm ngoài phạm vi cho loại, một ngoại lệ sẽ được đưa ra ( std::invalid_argument
hoặc std::out_of_range
).
Nếu chuyển đổi thành công và idx
không thành công 0
, idx
sẽ chứa chỉ mục của ký tự đầu tiên không được sử dụng để giải mã. Đây có thể là một chỉ mục đằng sau ký tự cuối cùng.
Cuối cùng, các kiểu tích phân cho phép xác định một cơ số, đối với các chữ số lớn hơn 9, bảng chữ cái được giả định ( a=10
cho đến khi z=35
). Bạn có thể tìm thêm thông tin về định dạng chính xác có thể phân tích cú pháp tại đây cho số dấu phẩy động , số nguyên có dấu và số nguyên không dấu .
Cuối cùng, đối với mỗi hàm cũng có một quá tải chấp nhận a std::wstring
là tham số đầu tiên.
số thành chuỗi
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Những điều này đơn giản hơn, bạn chuyển kiểu số thích hợp và bạn nhận lại một chuỗi. Đối với các tùy chọn định dạng, bạn nên quay lại tùy chọn dòng chuỗi C ++ 03 và sử dụng trình điều khiển dòng, như được giải thích trong một câu trả lời khác ở đây.
Như đã lưu ý trong các nhận xét, các hàm này trở lại độ chính xác phần định trị mặc định có thể không phải là độ chính xác tối đa. Nếu ứng dụng của bạn cần độ chính xác cao hơn, tốt nhất bạn nên quay lại các quy trình định dạng chuỗi khác.
Ngoài ra còn có các hàm tương tự được định nghĩa được đặt tên to_wstring
, các hàm này sẽ trả về a std::wstring
.