Đối với C ++ 98 , có một vài lựa chọn:
boost/lexical_cast
Boost không phải là một phần của thư viện C ++, nhưng chứa nhiều phần mở rộng thư viện hữu ích.
Mẫu lexical_cast
hàm cung cấp một hình thức thuận tiện và nhất quán để hỗ trợ các chuyển đổi phổ biến đến và từ các loại tùy ý khi chúng được thể hiện dưới dạng văn bản.
- Tài liệu của Boost
#include "boost/lexical_cast.hpp"
#include <string>
int main() {
int x = 5;
std::string x_str = boost::lexical_cast<std::string>(x);
return 0;
}
Đối với thời gian chạy, lexical_cast
hoạt động mất khoảng 80 micro giây (trên máy của tôi) trong lần chuyển đổi đầu tiên, và sau đó tăng tốc đáng kể sau đó nếu được thực hiện dự phòng.
itoa
Hàm này không được định nghĩa trong ANSI-C và không phải là một phần của C ++, nhưng được một số trình biên dịch hỗ trợ.
- cplusplus.com
Điều này có nghĩa là gcc
/ g++
không thể biên dịch mã bằng cách sử dụng itoa
.
#include <stdlib.h>
int main() {
int x = 5;
char * x_str = new char[2];
x_str = itoa(x, x_str, 10); // base 10
return 0;
}
Không có thời gian chạy để báo cáo. Tôi không có Visual Studio cài đặt, đó là báo cáo có thể biên dịch itoa
.
sprintf
sprintf
là một hàm thư viện chuẩn C hoạt động trên các chuỗi C và là một thay thế hoàn toàn hợp lệ.
Soạn một chuỗi có cùng văn bản sẽ được in nếu định dạng được sử dụng trên printf, nhưng thay vì được in, nội dung được lưu dưới dạng chuỗi C trong bộ đệm được chỉ bởi str.
- cplusplus.com
#include <stdio.h>
int main() {
int x = 5;
char * x_str = new char[2];
int chars_written = sprintf(x_str, "%d", x);
return 0;
}
Các stdio.h
tiêu đề có thể không cần thiết. Đối với thời gian chạy, sprintf
hoạt động mất khoảng 40 micro giây (trên máy của tôi) trong lần chuyển đổi đầu tiên, và sau đó tăng tốc đáng kể sau đó nếu được thực hiện dự phòng.
stringstream
Đây là cách chính của thư viện C ++ để chuyển đổi số nguyên thành chuỗi và ngược lại. Có các chức năng tương tự để stringstream
hạn chế hơn nữa mục đích sử dụng của luồng, chẳng hạn như ostringstream
. Việc sử dụng ostringstream
cụ thể cho người đọc mã của bạn rằng bạn chỉ có ý định sử dụng <<
toán tử. Hàm này là tất cả những gì đặc biệt cần thiết để chuyển đổi một số nguyên thành một chuỗi. Xem câu hỏi này để thảo luận chi tiết hơn.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
Đối với thời gian chạy, ostringstream
hoạt động mất khoảng 71 micro giây (trên máy của tôi), và sau đó tăng tốc đáng kể sau đó nếu được thực hiện dự phòng, nhưng không nhiều như các chức năng trước đó .
Tất nhiên có những lựa chọn khác, và bạn thậm chí có thể bọc một trong số chúng vào chức năng của riêng bạn, nhưng điều này mang lại cái nhìn phân tích về một số trong những cái phổ biến.