2015-01-30 34 views
7

Tôi muốn trích xuất một loạt các phần tử từ đầu mảng char và đặt chúng vào một chuỗi. Phạm vi có thể nhỏ hơn hoặc bằng số lượng phần tử.Trích xuất dải phần tử từ mảng char thành chuỗi

Đây là những gì tôi đã đưa ra.

// buffer is a std::array<char, 128> 

std::string message; 

for (int i = 0; i < numberToExtract; ++i) 
{ 
    message += buffer.at(i); 
} 

Có cách nào tốt hơn để làm điều này?

Tôi đã xem xét một thứ gì đó như std :: constructor iterator của chuỗi. Ví dụ. std::string(buffer.begin(), buffer.end()) nhưng tôi không muốn tất cả các yếu tố.

Cảm ơn.

+0

Khi làm việc với STL, bạn nên đặt câu hỏi cho các vòng lặp khởi tạo đối tượng. – Wolf

+1

@Wolf [Đó không phải là STL] (http://stackoverflow.com/a/5205571/2069064). – Barry

+0

@Barry I [xem] (https://en.wikipedia.org/wiki/C%2B%2B_Standard_Library). Tôi reword nó để * xem ra cho C + + Standard container khởi tạo với cho vòng *. – Wolf

Trả lời

13

Bạn không cần phải đi tất cả các cách để end:

std::string(buffer.begin(), buffer.begin() + numberToExtract) 

hay:

std::string(&buffer[0], &buffer[numberToExtract]); 

hoặc sử dụng các nhà xây dựng mà phải mất một con trỏ và chiều dài:

std::string(&buffer[0], numberToExtract); 
std::string(buffer.data(), numberToExtract); 
+0

Nhà xây dựng với ptr + len có vẻ là nhỏ gọn nhất, +1, có thể biến thể này nên đi trước. – Wolf

+0

Cảm ơn. Tôi không biết tại sao tôi không nghĩ về điều đó. – ksl

2

Bạn đang chặt chẽ với ví dụ thứ hai, bạn có thể làm

std::string(buffer.begin(), buffer.begin() + numberToExtract) 

này được sử dụng con trỏ số học kể từ khi sử dụng bộ nhớ tiếp giáp mảng.

+0

Cảm ơn. Câu trả lời tương tự đã đến trong vài lần. – ksl

2

Trình vòng lặp truy cập ngẫu nhiên cho phép bạn thực hiện các phép tính số học:

std::string(buffer.begin(), buffer.begin() + numberToExtract); 
+0

Cảm ơn. Câu trả lời tương tự đã đến trong vài lần. – ksl

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