2010-01-14 6 views

Trả lời

4

tôi có lẽ muốn làm điều gì đó về tự chung này:

#include <string> 
#include <sstream> 
#include <iostream> 

int main() {  
    std::stringstream stream("Something "); 

    stream.seekp(0, std::ios::end); 
    stream << 12345; 

    std::cout << stream.str(); 
    return 0; 
} 

Với một dòng bình thường, để thêm vào cuối cùng, bạn sẽ mở ra với std::ios::ate hoặc std::ios::app như tham số thứ hai , nhưng với chuỗi suối, điều đó dường như không hoạt động một cách đáng tin cậy (ít nhất với các trình biên dịch thực - không phải gcc cũng như VC++ tạo ra kết quả đầu ra mà tôi mong đợi khi/nếu tôi làm như vậy).

+1

'c_str() 'là sai, nên là 'std :: cout << stream.str();' – Frunsi

+0

@hassan: không, stringstream không có phương thức c_str() – Frunsi

+0

Cảm ơn Neil - ngu ngốc ngu ngốc về phía tôi. –

1

Nếu bạn đang sử dụng tăng, nó có lexical_cast có thể được sử dụng cho việc này. Nó về cơ bản là một phiên bản đóng gói của các bên trên, hoạt động trên bất kỳ loại nào có thể được ghi vào và đọc từ một luồng.

string s("something"); 

s += boost::lexical_cast<string>(12); 

của nó có lẽ không giá trị sử dụng nếu bạn không sử dụng tăng đã có, nhưng nếu bạn là nó có thể làm cho mã của bạn rõ ràng hơn, đặc biệt là làm cái gì đó như

foo(string("something")+boost::lexical_cast<string>(12));