2011-12-20 30 views
9

Làm thế nào để làm số nguyên -> chuỗi chuyển đổi đã được trả lời nhiều lần trên internet ... tuy nhiên, tôi đang tìm kiếm nhỏ gọn nhất "C++ - cách" để làm điều này.số nguyên để chuyển đổi chuỗi/chuỗi số nguyên nối trong C++ - các giải pháp nhỏ gọn hơn?

Kể từ khi bạn có thể nối dây bằng cách sử dụng + nhà điều hành quá tải, nó sẽ là một lợi thế để có thể làm điều gì đó dọc theo dòng của python-ish x = (stringVariable + str (intVariable)) nối, nhưng Tôi không biết nếu có một cách kinh điển để làm điều này trong C + +.

giải pháp

Phổ biến nhất tôi thấy là:

stringstream: Nếu có thể, nó sẽ được tốt đẹp không có 3 dòng mã (khai, viết vào dòng, chuyển đổi sang string) chỉ để nối một số chữ cái và số.

itoa: công trình này, nhưng tôi đang tìm một giải pháp C++ chuẩn. Ngoài ra, tôi nghĩ itoa về mặt kỹ thuật là phi tiêu chuẩn mặc dù tôi có thể sai.

định dạng tăng/tăng diễn xuất từ ​​vựng: điều này cũng hoạt động, nhưng không có gì trong vani C++ thực hiện công việc?

+3

Lưu ý rằng chuỗi thực sự thực hiện công việc. Gợi ý: Không phát minh ra (không) vấn đề. :) – Kos

+1

@Kos Chỉ cần một con thú cưng của tôi, nhưng 'std :: ostringstream' của nó làm công việc ở đây. –

+0

@JamesKanze: Để thực sự nitpick, công việc thực tế của chuyển đổi được thực hiện trong 'toán tử <<' thích hợp trên ostreams. – PlasmaHH

Trả lời

17
#include <string> 

String để số nguyên: int n = std::stoi(s);

Integer để chuỗi: std::string s = std::to_string(n);

+0

Cool, nhưng một tính năng mới mà tôi chưa biết (nó đáng nói đến mặc dù nó chính thức thậm chí không 1 tuổi và một số trình biên dịch hoặc người dùng trình biên dịch có thể chưa bắt kịp!). – Kos

+0

@Kos: Chính thức là 3,5 tháng tuổi;) (2011-09-01) – PlasmaHH

+0

C++ 11 giúp mã của tôi dễ bảo trì hơn rất nhiều. Hy vọng rằng việc trở thành người đầu tiên không trở lại để cắn tôi (về hỗ trợ trình biên dịch, các tiêu chuẩn mã hóa của công ty, v.v.). – daj

0

Có chuyện gì với việc có 3 dòng để chuyển đổi là gì? Nếu bạn cần phải sử dụng cùng một loại nối bất cứ lúc nào, chỉ cần đặt nó vào một chức năng và nó được thực hiện. Nó sẽ tốt hơn là sử dụng các giải pháp kỳ lạ.

2

stringVariable + boost::lexical_cast<std::string>(intVariable) sẽ thực hiện thủ thuật, nhưng tôi không chắc rằng đây là một ý tưởng hay. Ngay cả trong Python, một cái gì đó như '{}{:6f}'.format(stringVariable, intVariable) sẽ được nhiều hơn bình thường.

4

C++ 11 có std::to_string, nhưng trong C++ 03 không có "giải pháp gọi hàm đơn". Ngoài ra boost::lexical_cast (mặc dù chuyên biệt cho một số trường hợp nhất định) và std::to_string cuối cùng, hãy gọi operator<<(std::ostream&,T) cho bất kỳ T nào họ cũng nên chuyển đổi. Đó là tất cả về việc có thể xử lý chung mọi thứ, và khi op<< đã có, tại sao không tái sử dụng nó để tạo ra một biểu diễn chuỗi?

Các vấn đề liên quan