2015-01-30 8 views
7

Ich möchte einen Bereich von Elementen aus dem Anfang eines Char-Array extrahieren und sie in eine Zeichenfolge einfügen. Der Bereich kann kleiner oder gleich der Anzahl der Elemente sein.Bereich der Elemente aus Char-Array in Zeichenfolge extrahieren

Das ist, was ich mir ausgedacht habe.

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

std::string message; 

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

Gibt es einen besseren Weg, dies zu tun?

Ich habe etwas wie den Iterator-Konstruktor von std :: string betrachtet. Z.B. std::string(buffer.begin(), buffer.end()) aber ich will nicht alle Elemente.

Danke.

+0

Wenn Sie mit der STL arbeiten, ist es oft eine gute Idee, nach Schleifen zu fragen, die Objekte initialisieren. – Wolf

+1

@Wolf [Es ist nicht die STL] (http://stackoverflow.com/a/5205571/2069064). – Barry

+0

@Barry I [siehe] (https://en.wikipedia.org/wiki/C%2B%2B_Standard_Library). Ich reword es auf * für C++ Standard-Container, die mit for-Schleifen * initialisiert werden. – Wolf

Antwort

13

Sie müssen nicht den ganzen Weg gehen zu end:

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

oder: den Konstruktor

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

oder verwenden, die einen Zeiger und eine Länge nimmt:

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

Der Konstruktor mit ptr + len scheint der kompakteste zu sein, +1, vielleicht sollte diese Variante zuerst gehen. – Wolf

+0

Danke. Ich weiß nicht, warum ich nicht daran gedacht habe. – ksl

2

Sie mit Ihrem zweiten Beispiel der Nähe sind, können Sie tun

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

Dies wird zusammenhängenden Speicher verwenden, da Arrays Zeiger-Arithmetik.

+0

Danke. Die gleiche Antwort ist mehrmals gekommen. – ksl

2

Direktzugriffs-Iteratoren ermöglichen arithmetische Operationen:

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

Danke. Die gleiche Antwort ist mehrmals gekommen. – ksl

Verwandte Themen