string oder vector<char>
-
Ich glaube aus meiner Überschrift geht meine Frage schon etwas hervor: wenn ich einen char* in C++ umsetzen will empfiehlt es sich dann eher string oder eher vector<char> zu verwenden?
Des Weiteren wäre interessant ob man string in vector<char> und umgekehrt irgendwie konvertieren kann?!
Danke schonmal für die Hilfe

-
Nimm std::string. Mir fällt nichts ein, wo vector<char> mehr Sinn machen würde.
Zum Kopiereren geht wohl std::copy oder einer der vector-Konstruktoren.
-
Hm ich hab mir nur gedacht, da char* bzw. char[] ja ein CharArray darstellt, dass ich vielleicht in diesem Fall lieber vector<char> verwenden sollte.
Aber wenn string wirklich die bessere Lösung ist werde ich std::string verwenden.
Die Frage der Konvertierung bleibt jedoch. Ich habe gerade mit der Copy-Funktion der std::string versucht den String in einen vector<char> zu kopieren, bekomme jedoch Compiler-Errors

-
-
SeniiX schrieb:
Die Frage der Konvertierung bleibt jedoch. Ich habe gerade mit der Copy-Funktion der std::string versucht den String in einen vector<char> zu kopieren, bekomme jedoch Compiler-Errors

Wenn du denn unbedingt einen vector<char> aus einem C-String machen willst:
char mystring[20] = "hello world"; std::size_t length = std::strlen(mystring); typedef std::vector<char> chvec; chvec A(mystring, mystring+length); //Range-Konstruktor chvec B(std::strlen(mystring)); //genug platz bereitstellen... std::copy(mystring, mystring+length, B.begin()); //und dann reinkopieren chvec C; //leeren vector erstellen... std::copy(mystring, mystring+length, std::back_inserter(C)); //und den String hintenan kopierenVon std::string nach vector<char> sei dann dir zur Uebung ueberlassen

-
Ich danke euch vielmals

-
SeniiX schrieb:
Ich glaube aus meiner Überschrift geht meine Frage schon etwas hervor: wenn ich einen char* in C++ umsetzen will empfiehlt es sich dann eher string oder eher vector<char> zu verwenden?
Des Weiteren wäre interessant ob man string in vector<char> und umgekehrt irgendwie konvertieren kann?!
Danke schonmal für die Hilfe

vector<char> verwendet man auch, allerdings wenn, dann in kontexten, wo eine schnittstelle
char*erwartet. einen std::string kann man nämlich nicht (ohne weiteres) alschar*verwenden (wohl aber alsconst char*).
-
queer_boy schrieb:
vector<char> verwendet man auch, allerdings wenn, dann in kontexten, wo eine schnittstelle
char*erwartet. einen std::string kann man nämlich nicht (ohne weiteres) alschar*verwenden (wohl aber alsconst char*).Ja, darum gings mir eigentlich, weil ich gerade eine Library für eine SNMP-Kommunikation schreiben muss und dabei eine Art Vorlage in Java habe. Und der Datentyp byte[] wäre in ANSI C ja char*. Es ging mir eigentlich darum ob ich in diesem Kontext std::string verwenden kann.
-
Ich würde in diesem Kontext ein std::vector<unsigned char> verwenden
(byte entspricht unsigned char, nicht signed char)Wenns allerdings um c- strings (mit 0 terminierung) geht würde ich std::string verwenden.
Gruss simon
-
Hmja, so hatte ich es anfangs auch vor, bis dann auf einmal byte[] in string und umgekehrt konvertiert wurde und ich nicht wusste, wie ich einen vector<char> in std::string konvertiere.
Aber dieses Problem wurde sowieso bereits gelöst

-
Ich habe jetzt wie folgt std::string in std::vector<char> konvertiert:
std::vector<unsigned char> stringToCharvector(std::string string_dummy) { std::size_t length = string_dummy.size();; std::vector<unsigned char> chvec; for(int i=0; i<length; i++) { chvec.push_back(string_dummy[i]); } return chvec; }Kann mir bitte noch schnell jemand sagen, ob das so richtig ist? Funktionieren tut diese Funktion. Allerdings wäre interessant, ob sie in dieser Form Risiken o. Ä. hat?!
-
1. Übergib den std::string per const &.
2. Benutze doch std::copy// std::copy ist im header <algorithm> std::vector<unsigned char> stringToCharvector(const std::string& s) { // So wird das terminierende 0 nicht mitkopiert ! std::vector<unsigned char> v(s.size()); std::copy(s.begin(), s.end(), v.begin()); return v; }Simon
-
Ich denke, so würde es auch gehen:
std::vector<std::string::value_type> stringToCharvector( const std::string& s ) { return std::vector<std::string::value_type>( s.begin(), s.end() ); }